|
|
Pubblicato su 30/08/2018 13:29:41
|
|
|

Oggi ho discusso con i miei colleghi se usare una combinazione di @Configuration e @Bean per creare fagioli in Spring Boot o usare @Service e altre annotazioni direttamente sul corso. L'autore tende a usare il primo, cioè una combinazione di @Configuration e @Bean.
Vediamo prima un esempio: l'obiettivo è creare un modello per il SearchService.
Usa @Service direttamente:
Avvia l'applicazione, accesso browser: http://localhost:8081/search?q=koly, visualizzazione pagina: ["hello", "koly"]
Modi per usare @Configuration e @Bean:
Rispetto all'uso diretto del codice @Service, esiste una classe AppConfig che rimuove le annotazioni @Service poste sopra ElasticSearchServiceImpl. A prima vista, c'è più codice e classi. Quindi, quali sono i vantaggi di usare quest'ultimo?
L'autore ritiene che i benefici siano:
Separazione delle questioni
Utilizzando metodi @Configuration e @Bean, la creazione dei fagioli avviene tutta in un unico posto, e l'interfaccia e la sua implementazione non hanno nulla a che fare con la creazione del chicco.
Se la creazione del bean deve essere modificata, allora basta visualizzare e modificare la corrispondente classe Configuration, e non è necessario andare al bean Java corrispondente per apportare modifiche. Ad esempio, a volte la creazione dei fagioli deve essere cooperata con @Scope o @Profile, e basta modificare la classe Configuration.
Servizio singolo
@service annotazione stessa assume due responsabilità:
Uno è la creazione dei fagioli; La seconda è identificare una classe come servizio. Indica che una classe annotata è un "Servizio", originariamente definito da Domain-Driven
Design (Evans, 2003) come "un'operazione offerta come un'interfaccia che si presenta autonomamente nel modello, senza uno stato incapsulato."
Qui sopra c'è la spiegazione di Spring sulle @Service annotazioni. Quella is@Service rappresenta in realtà un'operazione di interfaccia indipendente e senza stato in DDD.
In modo @Bean e @Configuration cooperazione, la creazione dei fagioli viene affidata a una classe separata, e l'identità di Servizio viene trasferita all'interfaccia e al nome della classe in Java. Questo si riflette anche in Spring Data, come Repository, che viene identificato per nome, come CrudRepository. Pertanto, il termine Servizio è riflesso anche dal nome. Definizioni specifiche di gerarchia possono essere usate per fornire più livelli secondo il progetto per nome senza fare affidamento sulle annotazioni fornite da Spring, come layer Mapper, layer Validator, ecc.
Inoltre, fagiolo e servizio sono concetti bidimensionali. Una riguarda l'implementazione concreta e l'altra i concetti in DDD.
Più flessibile
Usando @Bean metodi, puoi creare istanze di classi nella libreria. Se usi il metodo @Service, non potrai aggiungere @Service commenti alle classi corrispondenti nella libreria.
Conoscenza minima
Il principio della conoscenza minima significa:
Meno tecnologia o conoscenza necessaria è necessaria per completare la funzione, meglio è, per garantire la semplicità del progetto e ridurre la difficoltà di apprendimento.
Poiché non è possibile creare istanze di classi nella libreria di classi usando @Service, bisogna usare la forma di @Configuration e @Bean quando si incontrano esigenze simili. A questo punto, ci sono annotazioni come @Service, @Configuration e @Bean in tutto il progetto, e queste annotazioni fanno la stessa cosa, cioè creano il fagiolo.
Con @Service, c'è un'alta probabilità di @Service, @Component, @Configuration e @Bean contemporaneamente.
mentre l'uso di @Configuration e @Bean può eliminare completamente l'uso di @Service e @Component, che è in linea con il principio della conoscenza minima.
Infine, tra l'altro, i Spring Bean sono stati creati in xml e successivamente hanno usato Java per la configurazione. La ragione principale per non usare XML è che non è abbastanza conciso e non offre funzionalità come il controllo in tempo di compilazione, piuttosto che la necessità di distribuire la creazione di fagioli tra le classi.
In sintesi, l'autore preferisce usare metodi @Configuration e @Bean. |
Precedente:Un modo semplice per cancellare lo schermo dalla riga di comando PythonProssimo:Diversi modi per usare le serrature distribuite (redis, zookeeper, database)
|