Spring的新Java配置支持中的中心工件是
@Configuration
注释类和
@Bean
注释方法。
该
@Bean
注释被用于指示一个方法实例,配置和初始化为通过Spring IoC容器进行管理的新对象。对于那些熟悉Spring的
<beans/>
XML配置的人来说,
@Bean
注释与
<bean/>
元素扮演的角色相同。你可以
@Bean
在任何Spring中使用-annotated方法
@Component
。但是,它们最常用于
@Configuration
豆类。
对类进行注释
@Configuration
表明其主要目的是作为bean定义的来源。此外,
@Configuration
类允许通过调用
@Bean
同一类中的其他方法来定义bean间依赖关系。最简单的
@Configuration
类如下:
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
上面的
AppConfig
类等效于以下Spring
<beans/>
XML:
<beans>
<bean id="myService" class="com.acme.services.MyServiceImpl"/>
</beans>
完整@Configuration vs“lite”@Bean模式?
当@Bean在未注释的类中声明方法时 @Configuration,它们被称为以“精简”模式处理。在一个@Component或甚至在一个普通的旧类中声明的Bean方法被认为是“精简”,包含类的主要目的不同,并且@Bean方法在那里是一种奖励。例如,服务组件可以通过@Bean每个适用组件类的附加方法将管理视图公开给容器。在这种情况下,@Bean方法是通用的工厂方法机制。
与full不同@Configuration,lite @Bean方法不能声明bean间依赖关系。相反,它们对其包含组件的内部状态进行操作,并且可选地,对它们可以声明的参数进行操作。@Bean因此,这种方法不应该引用其他 @Bean方法。每个这样的方法实际上只是特定bean引用的工厂方法,没有任何特殊的运行时语义。这里的积极副作用是不必在运行时应用CGLIB子类,因此在类设计方面没有限制(也就是说,包含类可能是final等等)。