1. 程式人生 > >@[email protected]和@Resour

@[email protected]和@Resour

@Autowired:是Spring自己定義的註解。@Autowired按byType自動注入。注入系統型別不會有type相同的多個類問題。當自定義了多個type相同,名稱不同的類時使用@Qualifier進行限定。@Qualifier預設限定的是name。使用@Qualifier需要在配置檔案<bean>標籤的內部新增<qualifier>標籤配置。<qualifier>標籤內部可以使用<attribute>標籤定義限定的key和value屬性。例如

<bean class="footmark.HelloWorld"> 
    <qualifier type="MovieQualifier"> 
        <attribute key="format" value="VHS"/> 
        <attribute key="genre" value="Comedy"/> 
    </qualifier> 
</bean> 
<bean class="footmark.HelloWorld"> 
    <meta key="format" value="DVD"/> 
    <meta key="genre" value="Action"/> 
</bean>

可以使用 <meta> 標籤來代替 <qualifier/> 標籤,如果 <meta> 標籤和 <qualifier/> 標籤同時出現,那麼優先使用 <qualifier> 標籤。如果沒有 <qualifier> 標籤,那麼會用 <meta> 提供的鍵值對來封裝 <qualifier> 標籤。

自動注入時,如果找不到相應的定義會導致自動注入失敗。

 

@Resource:是JSR-250規範定義的註解。還有例如@PostConstruct、@PreDestroy。@Resource預設按 byName自動注入。@Resource有兩個屬性是比較重要的,分是name和type,Spring將@Resource註解的name屬性解析為bean的名字,而type屬性則解析為bean的型別。所以如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。如果既不指定name也不指定type屬性,這時將通過反射機制使用byName自動注入策略。
  @Resource裝配順序
  1. 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則丟擲異常
  2. 如果指定了name,則從上下文中查詢名稱(id)匹配的bean進行裝配,找不到則丟擲異常
  3. 如果指定了type,則從上下文中找到型別匹配的唯一bean進行裝配,找不到或者找到多個,都會丟擲異常
  4. 如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退為一個原始型別進行匹配,如果匹配則自動裝配;

 

什麼時候用@Resource,什麼時候用@service

https://www.cnblogs.com/zhangxj/p/3970608.html