java - example - spring boot component scan controller
¿Cuál es la diferencia entre @ComponentScan y @EnableAutoConfiguration en Spring Boot? (2)
¿Cuál es la diferencia entre las anotaciones @ComponentScan
y @EnableAutoConfiguration
en Spring Boot? ¿Es necesario agregar estos? Mi aplicación funciona muy bien sin estas anotaciones. Solo quiero entender por qué tenemos que agregarlos.
¿Cuál es la diferencia entre las anotaciones @ComponentScan y @EnableAutoConfiguration en Spring Boot?
@EnableAutoConfiguration
anotación @EnableAutoConfiguration
le dice a Spring Boot que "adivine" cómo deseará configurar Spring, según las dependencias de jar que haya agregado. Por ejemplo, si HSQLDB está en su ruta de clase y no ha configurado manualmente ningún bean de conexión de base de datos, Spring configurará automáticamente una base de datos en memoria.
@ComponentScan
le dice a Spring que busque otros componentes, configuraciones y servicios en el paquete especificado. Spring puede escanear automáticamente, detectar y registrar sus beans o componentes de un paquete de proyecto predefinido. Si no se especifica ningún paquete, el paquete de clase actual se toma como el paquete raíz.
¿Es necesario agregar estos?
Si necesita Spring Boot para configurar automáticamente todo lo que @EnableAutoConfiguration
se requiere @EnableAutoConfiguration
. No es necesario que lo agregue manualmente, Spring lo agregará internamente para usted según la anotación que proporcione.
En realidad, la anotación @SpringBootApplication
es equivalente a usar @Configuration
, @EnableAutoConfiguration
y @ComponentScan
con sus atributos predeterminados.
Ver también:
Una de las principales ventajas de Spring Boot es su configuración basada en anotación frente a xml tradicional, @EnableAutoConfiguration configura automáticamente la aplicación Spring en función de sus archivos jar incluidos, configura los valores predeterminados o el ayudante según las dependencias en pom.xml. La configuración automática se suele aplicar en función de la ruta de clase y los beans definidos. Por lo tanto, no necesitamos definir ninguno de los DataSource, EntityManagerFactory, TransactionManager, etc. y, mágicamente, en base a la ruta de clase, Spring Boot crea automáticamente los beans apropiados y los registra por nosotros. Por ejemplo, cuando hay un tomcat-embedded.jar en su ruta de clase, es probable que necesite un TomcatEmbeddedServletContainerFactory (a menos que haya definido su propio bean EmbeddedServletContainerFactory). @EnableAutoConfiguration tiene un atributo de exclusión para deshabilitar una configuración automática explícita; de lo contrario, simplemente podemos excluirlo del pom.xml, por ejemplo, si no queremos que Spring configure el tomcat, excluye spring-bootstarter-tomcat de spring-boot-starter- web.
@ComponentScan proporciona un margen para el análisis de componentes de Spring, simplemente recorre el paquete base proporcionado y recoge las dependencias requeridas por @Bean o @Autowired, etc. En una aplicación Spring típica, @ComponentScan se usa en una clase de configuración, las anotadas con @ Configuración. Las clases de configuración contienen métodos anotados con @Bean. Estos métodos anotados @Bean generan beans administrados por el contenedor Spring. Esos beans se detectarán automáticamente mediante la anotación @ComponentScan. Hay algunas anotaciones que hacen que los beans sean detectables automáticamente como @Repository, @Service, @Controller, @Configuration, @Component. En el siguiente código, Spring comienza a escanear desde el paquete, incluida la clase BeanA.
@Configuration
@ComponentScan(basePackageClasses = BeanA.class)
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class Config {
@Bean
public BeanA beanA(){
return new BeanA();
}
@Bean
public BeanB beanB{
return new BeanB();
}
}