|
|
Geplaatst op 30-08-2018 13:29:41
|
|
|

Vandaag heb ik met mijn collega's besproken of ik een combinatie van @Configuration en @Bean moet gebruiken om bonen te maken in Spring Boot, of om @Service en andere annotaties direct in de klas te gebruiken. De auteur gebruikt meestal de eerste, dat wil zeggen, een combinatie van @Configuration en @Bean.
Laten we eerst naar een voorbeeld kijken: het doel is om een bean te maken voor de SearchService.
Gebruik @Service direct:
Start de applicatie, browsertoegang: http://localhost:8081/search?q=koly, paginaweergave: ["hello", "koly"]
Manieren om @Configuration en @Bean te gebruiken:
In tegenstelling tot het direct gebruiken van @Service code is er een AppConfig-klasse die de @Service annotaties die bovenop ElasticSearchServiceImpl zijn geplaatst, verwijdert. Op het eerste gezicht is er meer code en klassen. Wat zijn dan de voordelen van het gebruik van het laatste?
De auteur gelooft dat de voordelen zijn:
Scheiding van belangen
Met @Configuration en @Bean methoden is het creëren van bonen allemaal op één plek, en de interface en de implementatie ervan hebben niets te maken met het maken van de boon.
Als de creatie van de bean moet worden aangepast, hoef je alleen de bijbehorende Configuration-klasse te bekijken en aan te passen, en hoef je niet naar de bijbehorende Java-bean te gaan om wijzigingen aan te brengen. Zo moet het maken van een bonen soms worden samengewerkt met @Scope of @Profile, en hoeft alleen de Configuration-klasse te wijzigen.
Enkele taak
@service annotatie zelf draagt twee verantwoordelijkheden:
Eén daarvan is het maken van bonen; De tweede is het identificeren van een klasse als een dienst. Geeft aan dat een geannoteerde klasse een "Service" is, oorspronkelijk gedefinieerd door Domain-Driven
Design (Evans, 2003) als "een operatie aangeboden als interface die op zichzelf staat in het model, zonder ingekapselde toestand."
Hierboven volgt Springs uitleg van @Service annotaties. Die is@Service vertegenwoordigt eigenlijk een stateloze, onafhankelijke interface-operatie in DDD.
Als onderdeel van @Bean en @Configuration samenwerking wordt de creatie van bonen overgedragen aan een aparte klasse, en de identiteit van Service wordt overgedragen aan de interface en klassenaam in Java. Dit wordt ook weerspiegeld in Spring Data, zoals Repository, die wordt geïdentificeerd met naam, zoals CrudRepository. Daarom wordt Service ook weerspiegeld in de naam. Specifieke hiërarchiedefinities kunnen worden gebruikt om meer lagen te bieden volgens het project per naam, zonder te vertrouwen op de annotaties van Spring, zoals Mapper-laag, Validator-laag, enzovoort.
Bovendien zijn boon en dienst tweedimensionale concepten. Eén over de concrete implementatie en de andere over de concepten in DDD.
Flexibeler
Met @Bean methoden kun je instanties van klassen in de bibliotheek aanmaken. Als je de @Service-methode gebruikt, kun je @Service opmerkingen niet toevoegen aan de bijbehorende klassen in de bibliotheek.
Minste kennis
Het principe van minimale kennis betekent:
Hoe minder technologie of kennis nodig is om de functie te voltooien, hoe beter, om zo de eenvoud van het project te waarborgen en de moeilijkheid van het leren te verminderen.
Omdat het niet mogelijk is om instanties van klassen in de class library te maken met @Service, moet je de vorm van @Configuration en @Bean gebruiken wanneer je vergelijkbare behoeften tegenkomt. Op dit punt zijn er annotaties zoals @Service, @Configuration en @Bean in het hele project, en deze annotaties doen hetzelfde, namelijk de boon creëren.
Bij @Service is er een grote kans op @Service, @Component, @Configuration en @Bean tegelijk.
terwijl het gebruik van @Configuration en @Bean het gebruik van @Service en @Component volledig kan elimineren, wat in lijn is met het principe van minimale kennis.
Tot slot werden Spring beans in xml gemaakt en later Java gebruikt voor de configuratie. De belangrijkste reden om XML niet te gebruiken is dat het niet beknopt genoeg is en geen functies heeft zoals compile-time checking, in plaats van de noodzaak om de creatie van beans over klassen te verspreiden.
Samenvattend geeft de auteur de voorkeur aan het gebruik van @Configuration en @Bean methoden. |
Vorig:Een eenvoudige manier om het scherm te wissen vanuit de Python-opdrachtregelVolgend:Verschillende manieren om gedistribueerde sloten te gebruiken (redis, zookeeper, database)
|