天天看点

基本概念:@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等等)。