webentwicklung-frage-antwort-db.com.de

So erstellen Sie ein Bean mit @Bean im Spring Boot für abstrakte Klasse

Ich habe ein altes Springprojekt auf Spring Boot migriert. Angenommen, Code-Snippet muss ich zum Spring-Boot-Stil migrieren.

Hier meine Frage, wie man abstrakte Bean in @Bean konvertiert? 

<bean id="sample" class="com.test.core.common.AbstractClass" abstract="true">
    <property name="sample1" ref="sample1" />
     <property name="sample2" ref="sample2" />
</bean>
11
spandey15

Schreiben Sie Ihre abstrakte Basisklasse in Java (ohne Federkopplung):

public abstract class AbstractClass{   
    private Sample1 sample1;
    private Sample2 sample2;

    public AbstractClass(Sample1 sample1, Sample1 sample2){
       this.sample1 = sample1;
       this.sample2 = sample2;
   }
   ... 
}

Beachten Sie, dass das Hinzufügen eines Konstruktors mit Parametern (sowohl für die abstrakte als auch für die konkrete Klasse) die Injektion vereinfacht und Abhängigkeiten klarer macht.

Dann haben Sie zwei Möglichkeiten:

1) Beschriften Sie die konkreten Klassen mit @Component.
Sowie : 

@Component
public class MyClass extends AbstractClass{   
    public MyClass (Sample1 sample1, Sample1 sample2){
        super(sample1, sample2);
    }
}

Dieser erste Weg hat den Vorteil, kurz zu sein: Sie müssen lediglich eine Anmerkung hinzufügen.
Aber sie macht die Unterklasse de facto zu einer Bean, die möglicherweise durch den Spring-Kontext geladen wird.

2) Alternativ deklarieren Sie die Bean in einer Configuration-Klasse.
Sowie :

@Configuration
public class MyConfig{
  @Bean
   public MyClass myClass(Sample1 sample1, Sample1 sample2){
      return new MyClass(sample1, sample1);
   }
}

Dieser zweite Weg ist ausführlicher, hat jedoch den Vorteil, dass der Unterklassencode nicht geändert wird und die Clients der Klasse entscheiden können, ob die Klasse eine Bean ist.

Jeder Ansatz hat seine Vor- und Nachteile.
.__ So zu verwenden entsprechend der konkreten Anforderung.

13
davidxxx

Dieser Code muss nicht konvertiert werden. Sie müssen nur die Klassen erstellen, die com.test.core.common.AbstractClass als Spring Managed Beans deklarieren, indem Sie sie entweder mit @Component oder @Service kommentieren oder eine mit @Bean kommentierte Methode in Ihrer Konfigurationsklasse deklarieren.

Im Allgemeinen wird "abstract bean" in Java Configuration nicht benötigt, es gibt sogar keine Entsprechung. Es wurde in der XML-Konfiguration für die Parametervererbung benötigt, die jetzt mit einfachen Java-Methoden erreicht werden kann. Find Beispiel von Stephane Nicoll wer Spring Core-Entwickler ist.

2

Da Java über einen eigenen Mechanismus aus abstrakten Klassen und Vererbung verfügt, müssen Sie den folgenden Code in Ihrer Federkopplung nicht koppeln.

<bean id="sample" class="com.test.core.common.AbstractClass" abstract="true">
    <property name="sample1" ref="sample1" />
     <property name="sample2" ref="sample2" />
</bean>

In der XML-Konfiguration mussten Sie dazu die Vorlage für die Vererbung von untergeordneten Beans angeben. Da Springboot jedoch die Java-Konfiguration verwendet, wird dieser Teil direkt mit der Java-Vererbung behandelt.

Dies bedeutet, dass Sie diese abstrakte Klasse als normale Java-abstrakte Klasse deklarieren und nur die untergeordneten Klassen als Beans behandeln können, ohne sich um die abstrakte übergeordnete Klasse zu sorgen.

0
tryingToLearn