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);