文章目錄
裝配 bean
1. 自動化裝配
@Component
告知Spring爲被註解的類創建bean
> 爲bean命名:
> + Spring爲Bean默認命名爲類名首字母小寫
> + @Component(“XXX”)
> + @Named(“XXX”)
@ComponentScan
組件掃描默認不可用,需用此註解顯式配置
設置組件掃描基礎包:
- 默認以配置類(帶@Configuration)所在的包爲基礎包
@ComponentScan({"XXX", "XXX2"})/@ComponentScan(basePackages = {"XXX", "XXX2"})
指定基礎包,使用String作爲value值,類型不安全@ComponentScan(basePackageClasses = {XXX.class, XXX2.class})
使用類來作爲value值,這些類所在的包
將作爲基礎包;注:
也可以在包中創建僅用於掃描的空標記接口
,使用其作爲value值;
@Autowire
自動裝配,將已創建的bean自動注入到當前類中,可用於:
- 構造器
@Autowired
public CDPlayer(CopactDisc cd){
this.cd = cd;
}
> + 屬性的Setter方法
@Autowired
public void setCompactDisc(CopactDisc cd){
this.cd = cd;
}
> + 類的任何方法上
@Autowired
public void insertDisc(CompactDisc cd){
this.cd = cd;
}
自動裝配結果:
- 有且只有一個bean匹配依賴需求,將其裝配進來
- 沒有匹配的bean,創建應用上下文時,Spring拋出異常;若要避免,將@Autowired的
required
屬性設置爲false,此時,要裝配的bean爲null,需要代碼進行null檢查- 多個匹配的bean,Spring拋出異常
@Named 和 @Inject
@Inject註解來源於java依賴注入規範,大部分情況下可與@Autowired互換
2. 通過代碼裝配Bean
若想將第三方庫中的組件裝配到應用中,無法添加自動掃描和裝配的註解,此時,需要採用顯式裝配的方式。
XML
javaConfig
更強大、類型安全、對重構友好
- 不應該包含任何業務邏輯
- 不應該侵入到任何業務邏輯代碼中(不和其他類發生關聯)
- 通常放到單獨的包中
創建一個配置類
import org.springframework.context.annotation.Configuration
@Configuration//表明這個類是配置類
public class TestConfig {
}
@Bean
聲明一個簡單bean
此註解告訴Spring:
- 被其標記的方法返回的對象,要註冊爲Spring上下文中的bean;
方法體中包含最終產生bean實例的邏輯.
@Bean
public BeanObject createBean(){
return new BeanObject();
}
- Bean的id默認和被註解的方法名一樣,支持重命名,使用Bean註解的
name
屬性
Bean注入
- 方式1: 引用創建Bean的方法
eg:
若要在BeanObject2中注入BeanObject1,如下
@Bean
public BeanObject2 inject(){
return new BeanObject2(createBean());
}
@Bean
public BeanObject2 inject2(){
return new BeanObject2(createBean());
}
Spring會攔截所有對createBean()方法的調用,並確保直接返回該方法所創建的bean;
Spring默認是單例的,上述代碼中,兩個BeanObject2的bean中注入的是同一個BeanObject1的bean
- 方式2: 請求一個實現類bean的接口類型作爲參數
/**假設BeanObject是接口BeanObject1Interface的實現類
**/
@Bean
public BeanObject2 inject(BeanObject1Interface object1){
return new BeanObject2(object1);
}
這是引用其他bean的最佳選擇,不要求將BeanObject1Interface聲明到同一個配置類中,甚至沒要求其必須在javaConfig中聲明,可以通過組件掃描或xml進行配置。不管接口是採用什麼方式創建出來的,Spring都會將其傳入到配置方法中,用來創建BeanObject2 bean。
另外,除了構造器,我們還可以使用任何java功能來產生bean實例,比如setter方法等。
3. XML裝配
Spring Tool Suite: https://spring.io/tools
此工具有Eclipse、Visual Studio Code、Atom支持,可幫助我們編寫xml配置文件
- 對強依賴使用構造器注入;對選擇性的依賴使用屬性注入。