文章目錄
- spring中的依賴注入
- 一、@Autowired
- 二、@Qualifier
- 三、@Resource
- 四、總結
spring中的依賴注入
這里主要講述三個注解裝配
一、@Autowired
作用:自動按照類型注入。只要容器中唯一的一個bean對象類型和要注入的變量類型匹配,就可以注入成功。
如果ioc容器中沒任何bean的類型和要注入的變量類型匹配,則報錯。
如果Ioc容器中多個類型匹配時:必須用**@Qualifier(value=“xx”)**進行指定,否則就會報錯
出現位置:可以是變量上,也可以是方法上。
細節:在使用注解注入時,set方法就不是必須的了。
public @interface Autowired {boolean required() default true;}
特別:
//如果顯示定義了Autowired的required屬性為false,說明這個對象可以為null,否則不允許為空@Autowired(required = false)
二、@Qualifier
作用:在照類中注入的基礎之上再照名稱注入。在給類成員注入時不能單獨使用。但是在給方法參數注入時可以。
屬性:value:用于指定注入bean的id。
如果@Autowired自動裝配的環境比較復雜,自動裝配無法通過一個注解【@Autowired】完成的時候我們可以使用@Qualifier(value=“xx”)去配合@Autowired的使用,指定一個唯一的bean對象注入。
@Autowired
@Qualifier(value = "car")
private Movable movable;
三、@Resource
作用:直接照bean的id注入。它可以獨立使用。
@Resource(name = "car")
private Movable movable;
這段代碼和上面的代碼等效
注意:以上注入都只能注入其他bean類型的數據,而基本類型和String類型無法使用上述注解實現。
另外,集合類型的注入只能通過XML來實現。
四、總結
@Resource和@Autowired的區別:
- 都是用來自動裝配的,都可以放在屬性字段上。
- @ Autowired 通過byType的方式實現,而且必須要求這個對象存在。
- @Resource 默認通過byname的方式實現,如果找不到名字,則通過byType實現。如果兩個都找不到的情況下,就報錯。
@Resource 默認通過byname的方式實現,如果找不到名字,則通過byType實現。如果兩個都找不到的情況下,就報錯。 - @Autowired 通過byType的方式實現,@Resource 默認通過byname的方式實現