Spring中基于Java配置的核心内容是@Configuration注解的类和@Bean注解的方法。
@Bean注解用于表明方法的实例化,配置和初始化都是由Spring Ioc 容器管理的新对象,就像在XML配置的元素一样。开发者可以在任意的Spring@Component中使用@Bean注解方法,但大多数情况下,@Bean是配合@Configuration使用的。
使用@Configuration注解类时,这个类的目的就是作为Bean定义的地方。此外,@Configuration类内部的bean -----可以调用本类定义的其他bean作为依赖
-----。
当@Bean方法在没有@configuration下声明时,他们将会被lite模式处理。例如,在@component方法中bean方法或者一个旧类的bean方法将被视为lite。
- 有@configuration情形,相互依赖
当@Beans相互依赖时,表示依赖关系就像一个bean方法调用另一个方法一样简
单:
@Configuration
public class AppConfig {
@Bean
public Foo foo() {
return new Foo(bar());
} @
Bean
public Bar bar() {
return new Bar();
}
}
上面的例子,foo接受一个bar的引用来进行构造器注入:
这种方法声明的bean的依赖关系只有在@Configuration类的@Bean方法中有
效。
- 没有@configuration情形
lite的@Bean犯法不能声明bean之间的依赖关系,通常在lite模式下不应该调用另一个@Bean方法
你不能在@Component类中来声明bean的依赖关系,即在@Component中@Bean是lite模式,对于上例,如果改成
@Component
public class AppConfig {
@Bean
public Foo foo() {
return new Foo(bar());
} @
Bean
public Bar bar() {
return new Bar();
}
}
则foo()方法中new Foo(bar())传入的bar()方法会每次产生一个新的Bar对象,并不会像非lite模式中,每次调用法传入的Bar对象都是同一个
推荐的方法是@Configuration类中使用Bean方法,可以确保始终使用完整的模式。这将防止相同的@Bean方法被意外的多次调用,并且有助于减少lite模式下操作时难以跟踪的微小错误。