Saltar al contenido

¿Cuál es la diferencia entre @ComponentScan y @EnableAutoConfiguration en Spring Boot?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *