@Resource
的作用相當于 @Autowired
,只不過 @Autowired
按 byType 自動注入,面 @Resource
默認按 byName 自動注入罷了。@Resource
有兩個屬性是比較重要的,分別是 name 和 type,Spring 將 @Resource
注釋的 name 屬性解析為 Bean 的名字,而 type
屬性則解析為 Bean 的類型。所以如果使用 name 屬性,則使用 byName 的自動注入策略,而使用 type 屬性時則使用 byType
自動注入策略。如果既不指定 name 也不指定 type 屬性,這時將通過反射機制使用 byName 自動注入策略。
Resource 注釋類位于 Spring 發布包的 lib/j2ee/common-annotations.jar
類包中,因此在使用之前必須將其加入到項目的類庫中。來看一個使用 @Resource
的例子:
清單 16. 使用 @Resource 注釋的
Boss.java
package com.baobaotao; import javax.annotation.Resource; public class Boss { // 自動注入類型為 Car 的 Bean @Resource private Car car; // 自動注入 bean 名稱為 office 的 Bean @Resource(name = "office") private Office office; } |
一般情況下,我們無需使用類似于 @Resource(type=Car.class)
的注釋方式,因為 Bean 的類型信息可以通過
Java 反射從代碼中獲取。
要讓 JSR-250 的注釋生效,除了在 Bean 類中標注這些注釋外,還需要在 Spring 容器中注冊一個負責處理這些注釋的 BeanPostProcessor
:
<bean
class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/> |
CommonAnnotationBeanPostProcessor
實現了 BeanPostProcessor
接口,它負責掃描使用了 JSR-250 注釋的
Bean,并對它們進行相應的操作。