java - example - Dónde poner @Bean en Spring Boot?
application.yml spring boot (4)
Depende de las elecciones personales y no hay una buena o mala manera de hacerlo. Como es preferido o mostrado en la documentación de las referencias de arranque de primavera.
Como anotación de la clase principal con @SpringBootApplication hace que sea conveniente arrancar la aplicación de primavera. Pero solo busca subpaquetes para que la configuración de anidamiento dentro de la subcarpeta no detecte automáticamente el @Bean, que es lo único que hay que recordar, aparte de que todo se trata de preferencias personales.
Me pregunto cuál sería el mejor lugar para que una aplicación Spring Boot registre frijoles adicionales. Tengo una clase principal que se anota con @SpringBootApplication
y los beans definidos en esa clase se recogen. Pero cuando pongo esos granos en otra clase parece que no están siendo registrados.
Al leer la documentación, tuve la idea de que @SpringBootApplication
buscaría implícitamente las clases que tienen anotaciones @Bean
en ellas.
Entonces mis opciones ahora son:
Poner todo el
@Bean
anotado@Bean
en mi clase principal@SpringBootApplication public class MyApplication { @Bean public Filter AuthenticationFilter() { return new AuthenticationFilter(); } public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
Crea una clase de configuración y anota eso con
@Configuration
@Configuration public class MyConfiguration { @Bean public Filter AuthenticationFilter() { return new AuthenticationFilter(); } }
¿Hay una mejor manera de hacer esto?
En realidad, es su elección que no hay un estándar de primavera para decir cuál es el mejor, pero al definir los principios de diseño de una POO de clase dice que una clase debe ser loosely coupled
y highly cohesive
, debe follow Single Responsibility Principle (SRP)
.
Coupling
-> Grado de conocimiento que una clase tiene sobre otra clase
Cohesion
-> Grado que indica qué tan bien enfocada está su clase
SRP
-> Una clase debe tener solo una responsabilidad, solo debe haber una razón para cambiar una clase.
Entonces, de acuerdo con la cohesión y la clase de principios de SRP debería estar bien enfocado y tener solo una responsabilidad.
Aquí en tu caso solo tienes 2 frijoles, pero en el futuro, estos frijoles podrían aumentar. Entonces debería seguir su segundo punto y crear otra clase para su declaración de frijol.
Y en mi elección, incluso debería crear más clases de configuración, por lo que una clase de configuración debería tener un tipo similar de beans.
Es más o menos una cuestión de preferencia, pero generalmente se considera una mejor práctica colocar los beans expuestos en clases de configuración, que están lógicamente agrupadas.
Por ejemplo, puede tener varias clases de configuración con una cantidad de beans dentro de cada una: una clase de configuración de autenticación con beans para AuthenticationProvider o UserDetailsService; una clase de configuración Thymeleaf que contiene frijoles para varios dialectos de Thymeleaf, etc.
Sí, incluso los granos dentro de la clase @Configuration suele ser la forma preferida para Spring.
Esta es también una de las formas en que Spring recomienda inyectar interdependencias entre los beans, que se muestra en la siguiente muestra copiada de la guía de referencia de Spring here :
Además, el alcance predeterminado de @Beans es SINGLETON, si especifica un alcance diferente como PROTOTIPO, la llamada se pasará al método original. Eche un vistazo a esta sección en la Guía de referencia de primavera