|
|
Publicado en 30/8/2018 13:29:41
|
|
|

Hoy he hablado con mis compañeros sobre si usar una combinación de @Configuration y @Bean para crear judías en Spring Boot o usar @Service y otras anotaciones directamente en la clase. El autor suele usar el primero, es decir, una combinación de @Configuration y @Bean.
Veamos primero un ejemplo, el objetivo es crear un grano para el SearchService.
Usa @Service directamente:
Inicia la aplicación, acceso al navegador: http://localhost:8081/search?q=koly, visualización de la página: ["hola", "koly"]
Formas de usar @Configuration y @Bean:
En comparación con usar código @Service directamente, existe una clase AppConfig que elimina las anotaciones @Service colocadas encima de ElasticSearchServiceImpl. A simple vista, hay más código y clases. ¿Cuáles son entonces los beneficios de usar esta última?
El autor considera que los beneficios son:
Separación de las cuestiones
Usando métodos @Configuration y @Bean, la creación de los granos se realiza en un solo lugar, y la interfaz y su implementación no tienen nada que ver con la creación del grano.
Si la creación del bean necesita cambiarse, entonces solo necesitas ver y modificar la clase de Configuración correspondiente, y no necesitas ir al bean Java correspondiente para hacer cambios. Por ejemplo, a veces la creación de bean necesita cooperarse con @Scope o @Profile, y solo es necesario modificar la clase Configuration.
Función única
@service anotación en sí misma asume dos responsabilidades:
Una es la creación de judías; La segunda es identificar una clase como servicio. Indica que una clase anotada es un "Servicio", originalmente definido por Domain-Driven
Design (Evans, 2003) como "una operación ofrecida como una interfaz que se mantiene sola en el modelo, sin estado encapsulado."
Arriba está la explicación de Spring sobre @Service anotaciones. Ese is@Service representa en realidad una operación de interfaz independiente y sin estado en DDD.
En forma de cooperación @Bean y @Configuration, la creación de los granos se entrega a una clase separada, y la identidad del Servicio se transmite a la interfaz y al nombre de la clase en Java. Esto también se refleja en Spring Data, como Repository, que se identifica por su nombre, como CrudRepository. Por lo tanto, el nombre también se refleja en el servicio. Se pueden usar definiciones específicas de jerarquía para proporcionar más capas según el proyecto por nombre sin depender de las anotaciones proporcionadas por Spring, como capa Mapper, capa Validator, etc.
Además, bean y service son conceptos bidimensionales. Uno sobre la implementación concreta y otro sobre los conceptos en DDD.
Más flexible
Usando @Bean métodos, puedes crear instancias de clases en la biblioteca. Si usas el método @Service, no podrás añadir @Service comentarios a las clases correspondientes en la biblioteca.
Menor conocimiento
El principio de conocimiento mínimo significa:
Cuanta menos tecnología o conocimiento se requiera para completar la función, mejor, para asegurar la simplicidad del proyecto y reducir la dificultad de aprenderlo.
Como no es posible crear instancias de clases en la biblioteca de clases usando @Service, hay que usar la forma de @Configuration y @Bean cuando se encuentran necesidades similares. En este punto, hay anotaciones como @Service, @Configuration y @Bean en todo el proyecto, y estas anotaciones hacen lo mismo, es decir, crean el grano.
Con @Service, hay una alta probabilidad de @Service, @Component, @Configuration y @Bean al mismo tiempo.
mientras que el uso de @Configuration y @Bean puede eliminar completamente el uso de @Service y @Component, lo cual está en línea con el principio de conocimiento mínimo.
Por cierto, los Spring Beans se crearon en XML y más tarde se usaron Java para la configuración. La razón principal para no usar XML es que no es lo suficientemente conciso y no cuenta con funciones como la comprobación en tiempo de compilación, en lugar de la necesidad de distribuir la creación de los granos entre clases.
En resumen, el autor prefiere usar métodos @Configuration y @Bean. |
Anterior:Una forma sencilla de borrar la pantalla de la línea de comandos de PythonPróximo:Varias formas de usar cerraduras distribuidas (redis, zookeeper, base de datos)
|