Saltar al contenido

diferencia entre @Component y @Configuration en Spring 3

Si encuentras algún fallo con tu código o trabajo, recuerda probar siempre en un ambiente de testing antes añadir el código al proyecto final.

Solución:

Integración de Spring de Book Pro

@Configuration las clases son como regulares @Components clases, excepto que los métodos anotados con @Bean se utilizan para fábrica de frijoles. Tenga en cuenta que un @Component con @Bean métodos anotados funciona de la misma manera, excepto que no se respetan los alcances y el @Bean los métodos se vuelven a invocar (sin almacenamiento en caché en juego), por lo que @Configuration se prefiere, aunque requiere CGLIB

@Configuration es el corazón del mecanismo de configuración basado en Java que se introdujo en Spring 3. Proporciona una alternativa a la configuración basada en XML.

Entonces, los 2 fragmentos siguientes son idénticos:


    
    ... other configuration ...

y:

@Configuration
@ComponentScan(basePackages = "my.base.package")
public class RootConfig 
    ... other configuration ...

En ambos casos Spring escaneará en my.base.package y debajo para las clases anotadas con @Component o una de las otras anotaciones que están meta-anotadas con @Component como @Service.

Aquí hay una diferencia con el ejemplo completo: –

//@Configuration or @Component
public static class Config 
    @Bean
    public A a() 
        return new A();
    
    //**please see a() method called inside b() method**
    @Bean
    public B b() 
        return new B(a());
    

1) Aquí, si la clase Config está anotada con @configuration, entonces el método a() y el método b(), ambos serán llamados una vez .

2) Aquí, si la clase Config está anotada con @component, entonces se llamará al método b() una vez pero se llamará al método a() dos veces .

Problema en (2) :- ya que hemos notado el problema con la anotación @component. Esta segunda configuración (2) es totalmente incorrecta porque Spring creará un bean singleton de A, pero B obtendrá otra instancia de A que está fuera del control de contexto de Spring.

Solución :- podemos usar la anotación @autowired con la anotación @component dentro de la clase Config.

@Component
public static class Config 
    @Autowired
    A a;

    @Bean
    public A a() 
        return new A();
    

    @Bean
    public B b() 
        return new B(a);
    

Comentarios y puntuaciones

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



Utiliza Nuestro Buscador

Deja una respuesta

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