Heute habe ich mit meinen Kollegen besprochen, ob die Kombination von @Configuration und @Bean verwendet werden soll, um eine Bean zu erstellen oder @Service und andere Anmerkungen direkt zu verwenden, um sie in die Klasse zu platzieren. Der Autor verwendet den ersten Typ, nämlich die Kombination von @Configuration und @Bean.
Schauen wir uns zunächst ein Beispiel an, das Ziel ist es, eine Bohne von SearchService zu erstellen.
Verwenden Sie direkt @Service:
// SearchService.javapackage li.koly.search; importieren java.util.list; public interface searchService {list <object> such (string q);} // elasticsearchSeerviceImpl.javapackage li.koly.search; java.util.list; @ServiceComponentPublic -Klasse ElasticsearchServiceImPlements implementiert SearchService {@Override public List <Object> such (string q) {return arrays.aslist ("Hallo", q); }} // application.javapackage li.koly.search; import org.springframework.beans.factory.Annotation.autowired; import org.springFramework.boot.springApplication; import org.springFramework.boot.autoconfigure.SpringPliction; org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.restcontroller; import Java.util.list;@SpringBootApplication@restControllerPublic Class {@autoWerien private SearchService SearchService Searchservice; @GetMapping ("/such") publiclist <Object> Hallo (String Q) {return SearchService.search (q); } public static void main (String [] args) {SpringApplication.run (application.class, args); }}Anwendung starten, Browserzugriff: http: // localhost: 8081/such? Q = koly, Seitenanzeige: ["Hallo", "koly"]
So verwenden Sie @Configuration und @Bean:
// ElasticSearchServiceImpl.javapackage li.koly.search; import java.util.arrays; import java.util.list; öffentliche Klasse ElasticsearchServiceImpl implements searchService {@override public list <object> such> suche }} // Appconfig.javapackage li.koly.search; import org.springframework.context.annotation.bean; }}Im Vergleich zu dem Code, der @Service direkt verwendet, gibt es eine AppConfig -Klasse, und die @Service -Annotation, die auf ElasticsearchServiceImpl platziert ist, wird entfernt. Auf den ersten Blick gibt es mehr Codes und Klassen. Was sind die Vorteile der Verwendung der letzteren?
Der Autor glaubt, dass die Vorteile sind:
Bedenken Trennung
Mit @Configuration und @Bean wird die Schaffung von Bohnen an einem Ort platziert, und die Schnittstelle und ihre Implementierung haben nichts mit der Erstellung von Bohnen zu tun.
Wenn die Erstellung der Bean geändert werden muss, müssen Sie nur die entsprechende Konfigurationsklasse anzeigen und ändern, und Sie müssen nicht zur entsprechenden Java -Bean für Änderungen gehen. Beispielsweise erfordert die Erstellung von Bohnen beispielsweise eine Zusammenarbeit mit @Scope oder @Profile, und Sie müssen die Konfigurationsklasse zu diesem Zeitpunkt nur ändern.
Einzelverantwortung
Die @Service -Annotation selbst übernimmt zwei Verantwortlichkeiten:
Einer ist die Erschaffung von Bohnen;
Die zweite besteht darin, eine Klasse als Dienst zu identifizieren.
Zeigt an, dass eine kommentierte Klasse ein "Dienst" ist, der ursprünglich durch domänengesteuerte definiert wurde
Design (Evans, 2003) als "eine Operation als Schnittstelle, die allein im Modell steht, ohne eingekapselten Zustand."
Das obige ist die Erklärung von Spring von @Service Annotation. Das heißt, @Service repräsentiert tatsächlich eine in DDD vorgesehene staatenlose, unabhängige Operation.
Mit der Methode @Bean und @Configuration wird die Erstellung der Bean an eine separate Klasse übergeben, und die Serviceidentität wird an die Schnittstelle und den Klassennamen in Java übergeben. Dies spiegelt sich auch in Federdaten wider. Zum Beispiel wird Repository namentlich identifiziert, wie z. B. crudrepository. Daher spiegelt sich der Service auch in seinem Namen wider. Spezifische Hierarchie -Definition ist durch den Namen, ohne sich auf die von Spring bereitgestellten Anmerkungen zu verlassen, bequem, mehr Hierarchien nach dem Projekt bereitzustellen, z. B. die Mapper -Ebene, die Validator -Ebene usw.
Darüber hinaus sind Bean und Service zwei Dimensionen. Bei einem handelt es sich um die konkrete Implementierung und das andere handelt von Konzepten in DDD.
Flexibler
Mit @Bean können Sie Instanzen von Klassen in der Bibliothek erstellen. Wenn Sie @Service verwenden, können Sie der entsprechenden Klasse in der Bibliothek nicht @Service Annotation hinzufügen.
am wenigsten Wissen (Mindestwissen Prinzip)
Das Mindestwissenprinzip bedeutet:
Je weniger Technologie oder Kenntnisse erforderlich sind, um die Funktion zu vervollständigen, desto besser, um sicherzustellen, dass das Projekt einfach ist und die Schwierigkeit des Lernens des Projekts verringert.
Da die Verwendung @Service keine Instanz einer Klasse in der Klassenbibliothek erstellen kann, müssen Sie bei ähnlichen Anforderungen die Form von @Configuration und @Bean verwenden. Zu diesem Zeitpunkt existieren Anmerkungen wie @Service, @Configuration und @Bean gleichzeitig im gesamten Projekt, und die Dinge, die diese Annotationen tun, sind die gleichen, dh die Schaffung der Bohne.
Bei @Service ist es sehr wahrscheinlich, dass @Service, @Component, @Configuration und @Bean gleichzeitig existieren werden.
Wenn Sie @Configuration und @Bean verwenden, können Sie @Service und @Component vollständig ignorieren, was dem Prinzip des Mindestwissens entspricht.
Übrigens wurde die Spring -Bohne in XML zuvor erstellt und Java wurde später für die Konfiguration verwendet. Der Hauptgrund für die Nichtverwendung von XML ist, dass XML nicht präzise genug ist und keine Funktionen wie Kompilierungszeitprüfung hat, anstatt die Schaffung von Bohnen in verschiedene Klassen zu zerstreuen.
Zusammenfassend lässt sich sagen, dass der Autor @Configuration und @Bean verwendet.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.