1.概述
在使用Spring框架的過程中, 依賴注入是必須的, 大多時候會使用Autowried注解來進行依賴注入, 但是也可以使用Resource注解來實現注入.
那么兩個注解有什么區別呢? 它們又是如何使用的呢?
2.Autowried
用來裝配bean, 可作用於字段上, 也可以作用於setter方法上.
是Spring的注解.
默認情況下要求對象必須存在, 它要求依賴對象必須存在. 若允許null值, 可以設置它的required為false.
默認按照類型進行裝配注入. 如果想按照名稱進行裝配的話, 需要與Qualifer注解搭配使用.
@Autowried
@Qualifier("admin")
private AdminDAO adminDAO;
3.Resource
用來裝配bean, 可作用於字段上, 也可以作用於setter方法上.
是J2EE的注解.
默認按照名稱來裝配注入, 只有找不到與名稱匹配的bean才會按照類型來注入.
它有兩個屬性是比較重要的:
- name: Spring將name的屬性值解析為bean的名稱, 使用byName的自動注入策略
- type: Spring將type的屬性值解析為bean的類型, 使用byType的自動注入策略
如果既不指定name屬性又不指定type屬性, Spring這時通過反射機制使用byName自動注入策略
Resource注解的裝配順序
- 如果同時指定了name屬性和type屬性, 那么Spring將從容器中找唯一匹配的bean進行裝配, 找不到則拋出異常
- 如果指定了name屬性值, 則從容器中查找名稱匹配的bean進行裝配, 找不到則拋出異常
- 如果指定了type屬性值, 則從容器中查找類型匹配的唯一的bean進行裝配, 找不到或者找到多個都會拋出異常
- 如果都不指定, 則會自動按照byName方式進行裝配, 如果沒有匹配, 則回退一個原始類型進行匹配, 如果匹配則自動裝配
4.總結
Resource注解是J2EE提供的, 而Autowried注解是Spring提供的, 如果想減少對Spring的依賴建議使用Resource注解.
其實也沒必要, Spring框架目前大部分應用都使用着, 使用Spring的注解也沒什么不好.
不過我個人喜歡使用Resource注解.