@Autowired:注入依賴對象
實現依賴注入,spring容器會對bean中所有字段、方法進行遍歷,標註有@Autowired註解的,都會進行注入
@Autowired標註在字段上面:假定字段類型爲一個自定義的普通的類型,候選者查找過程如下
@Autowired標註在方法上或者方法參數上面:假定參數類型爲爲一個自定義的普通的類型,候選者查找過程如下:
上圖中深色的表示方法注入和字段注入查找過程的不同點。
上圖中展示的是方法中只有一個參數的情況,如果有多個參數,就重複上面的過程,直到找到所有需要注入的參數。
@Autowired查找候選者可以簡化爲
按類型找->通過限定符@Qualifier過濾->@Primary->@Priority->根據名稱找(字段名稱或者方法名稱)
概括爲:先按類型找,然後按名稱找
spring使用下面這個類處理@Autowired註解
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor
@Resource:注入依賴對象
spring容器會對bean中所有字段、方法進行遍歷,標註有@Resource註解的,都會進行注入
@Resource標註在字段上面:假定字段類型爲一個自定義的普通的類型,候選者查找過程如下
@Autowired標註在方法上或者方法參數上面:假定參數類型爲爲一個自定義的普通的類型,候選者查找過程如下:
@Resource查找候選者可以簡化爲
先按Resource的name值作爲bean名稱找->按名稱(字段名稱、方法名稱、set屬性名稱)找->按類型找->通過限定符@Qualifier過濾->@Primary->@Priority->根據名稱找(字段名稱或者方法參數名稱)
概括爲:先按名稱找,然後按類型找
spring使用下面這個類處理@Resource註解
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor
@Qualifier:限定符
可以在依賴注入查找候選者的過程中對候選者進行過濾
@Primary:設置爲主要候選者
注入依賴的過程中,當有多個候選者的時候,可以指定哪個候選者爲主要的候選者
@Bean
方法上標註了@Bean,並且方法中是有參數的,spring調用這個方法創建bean的時候,會將參數中的兩個參數注入進來
泛型注入
public class BaseService<T> {
@Autowired
private IDao<T> dao; //@1
public IDao<T> getDao() {
return dao;
}
public void setDao(IDao<T> dao) {
this.dao = dao;
}
}
dao屬性並沒有指定具體需要注入那個bean,此時是根據尖括號中的泛型類型來匹配的