天天看點

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