Es importante entender el código bien previamente a adaptarlo a tu proyecto y si ttienes algo que aportar puedes dejarlo en los comentarios.
Solución:
¿Cuál es la diferencia entre las anotaciones @ComponentScan y @EnableAutoConfiguration en Spring Boot?
@EnableAutoConfiguration
La anotación le dice a Spring Boot que “adivine” cómo querrá configurar Spring, según las dependencias de jar que haya agregado. Por ejemplo, si HSQLDB está en su classpath y no ha configurado manualmente ningún bean de conexión a la base de datos, entonces 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, detectar y registrar automáticamente sus beans o componentes del paquete de proyecto predefinido. Si no se especifica ningún paquete, el paquete de clase actual se toma como paquete raíz.
¿Es necesario agregar estos?
Si necesita Spring Boot para configurar automáticamente todo para usted @EnableAutoConfiguration
es requerido. No necesita agregarlo manualmente, Spring lo agregará internamente según la anotación que proporcione.
En realidad el @SpringBootApplication
anotación es equivalente a usar @Configuration
, @EnableAutoConfiguration
y @ComponentScan
con su defecto attributes.
Ver también:
- Usando la anotación @SpringBootApplication
- Configuración automática
Una de las principales ventajas de Spring Boot es su anotación frente a las configuraciones tradicionales basadas en xml, @EnableAutoConfiguration configura automáticamente la aplicación Spring en función de sus archivos jar incluidos, configura los valores predeterminados o el asistente en función de las dependencias en pom.xml. La configuración automática generalmente se aplica en función del classpath y los beans definidos. Por lo tanto, no necesitamos definir ninguno de los DataSource, EntityManagerFactory, TransactionManager, etc. Y mágicamente, en función de la ruta de clase, Spring Boot crea automáticamente los beans adecuados y los registra para nosotros. Por ejemplo, cuando hay un tomcat-embedded.jar en su classpath, es probable que necesite un TomcatEmbeddedServletContainerFactory (a menos que haya definido su propio bean EmbeddedServletContainerFactory). @EnableAutoConfiguration tiene una exclusión attribute para deshabilitar una configuración automática explícitamente, de lo contrario, simplemente podemos excluirla del pom.xml, por ejemplo, si no queremos que Spring configure el tomcat, excluya spring-bootstarter-tomcat de spring-boot-starter-web.
@ComponentScan proporciona alcance para el escaneo de componentes de resorte, simplemente funciona 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 clases de configuración, las anotadas con @Configuration. Las clases de configuración contienen métodos anotados con @Bean. Estos métodos anotados por @Bean generan beans administrados por el contenedor Spring. Esos beans serán detectados automáticamente por la anotación @ComponentScan. Hay algunas anotaciones que hacen que los beans sean autodetectables 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();
@EnableAutoConfiguration
en Spring Boot le dice cómo desea configurar Spring, en función de los archivos jar que haya agregado en su classpath. Por ejemplo, si agrega spring-boot-starter-web
dependencia en su classpath, configura automáticamente Tomcat y Spring MVC.
org.springframework.boot
spring-boot-starter-web
Puedes usar @EnableAutoConfiguration
anotación junto con @Configuration
anotación. Tiene dos elementos opcionales,
- excluir: si desea excluir la configuración automática de una clase.
- excluirNombre: si desea excluir la configuración automática de una clase utilizando el nombre completo de la clase.
Ejemplos:
@Configuration
@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
public class MyConfiguration
@EnableAutoConfiguration(excludeName = "org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration")
public class Application
public static void main(String[] args)
SpringApplication.run(Application.class, args);
@SpringBootApplication
es una versión más nueva de @EnableAutoConfiguration
que se introdujo en Spring Boot 1.2.
@SpringBootApplication
es una combinación de tres anotaciones,
-
@Configuration
– para clases de configuración basadas en Java. -
@ComponentScan
– para habilitar el escaneo de componentes, se escanearán automáticamente todos los paquetes y subpaquetes que se encuentran bajo el paquete raíz en el que se aplica @SpringBootApplication. -
@EnableAutoConfiguration
– para habilitar la autoconfiguración del
Las clases se basan en los frascos agregados en classpath.
@ComponentScan
habilita el escaneo de componentes para que las clases de controlador web y otros componentes que cree se descubran y registren automáticamente como beans en el contexto de la aplicación de Spring. Puede especificar los paquetes base que se escanearán para el descubrimiento automático y el registro de beans.
Uno de los elementos opcionales es,
- basePackages: se puede usar para indicar paquetes específicos para escanear.
Ejemplo,
@ComponentScan(basePackages = "com.example.test")
@Configuration
public class SpringConfiguration
Agradecemos que quieras corroborar nuestra labor poniendo un comentario y valorándolo te damos la bienvenida.