0
点赞
收藏
分享

微信扫一扫

基本概念:@Bean和@Configuration


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等等)。

在常见的场景中,@Bean方法将在@Configuration类中声明,确保始终使用“完整”模式,并因此将交叉方法引用重定向到容器的生命周期管理。这可以防止@Bean通过常规Java调用意外地调用相同的 方法,这有助于减少在“精简”模式下操作时难以跟踪的细微错误。

 

 

举报

相关推荐

0 条评论