儘管在大部分場景下經過組件掃描和自動裝配實現Bean自動化配置是更爲推薦的方式,可是也存在沒法使用自動化裝配的場景,例如當你須要爲一些第三方庫中的組件類建立Bean裝配到你的應用中,這時候是沒法在類代碼中添加註解所以也就沒法使用自動化配置方案了。在這種狀況下能夠推薦使用JavaConfig的方式進行顯示裝配,相比XML它是更好的解決方案,更安全且容易重構。JavaConfig類一般應該做爲配置類放在單獨的包中與處理程序邏輯的類區分開。使用JavaConfig裝配Bean包括以下步驟:java
@Configuration public class MemcachedConfig { }
@Configuration public class MemcachedConfig { @Bean public MemcachedService memcacheService(){ return new MemcachedService(); } }
要在JavaConfig中聲明Bean,咱們須要編寫一個方法,該方法會建立所需類型的實例,而後爲該方法添加@Bean註解。@Bean註解會告訴Spring該方法將會返回一個對象,該對象會註冊爲Spring上下文中的Bean,默認狀況下,Spring容器中本方法建立的Bean的ID與方法名相同,若是想修改Bean的名稱既能夠經過修改方法名也能夠經過@Bean註解的name屬性指定安全
在JavaConfig中裝配有依賴關係的Bean的方法有如下幾種:memcached
1)方法1,引用依賴Bean的建立方法spa
@Configuration public class MemcachedConfig { @Bean public MemcachedClient memcachedClient(){ return new MemcachedClient(); } @Bean public MemcachedService memcacheService(){ return new MemcachedService(memcachedClient()); } }
注意這裏memcachedClient的實例Bean並非經過調用memcachedClient()方法獲取的,由於在memcachedClient()方法被@Bean註解修飾,Spring在第一次調用該方法加載Bean以後會攔截全部對該方法的調用並直接返回返回該方法所建立的Beancode
2)方法2,將依賴Bean做爲方法參數傳入對象
@Configuration public class MemcachedConfig { @Bean public MemcachedClient memcachedClient(){ return new MemcachedClient(); } @Bean public MemcachedService memcacheService(Memcached memcachedClient){ return new MemcachedService(memcachedClient); } }
這種方式引用依賴Bean一般是咱們推薦的方式他不要求依賴Bean與該類的聲明放在同一個配置類中,甚至不要求依賴Bean必須採用JavaConfig聲明自動化
基於JavaConfig裝配Bean能夠組合使用@Bean和@Qualifier、@Primary或自定義註解處理歧義Beanio