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