1. 程式人生 > >Spring2.5中使用註解裝配屬性

Spring2.5中使用註解裝配屬性

原文章:http://blog.csdn.net/jadyer/article/details/6038604

Spring2.5中使用註解裝配屬性
可在Java程式碼中使用@Resource或者@Autowired註解進行裝配,但需在XML中配置以下資訊
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"


然後顯式的配置<context:annotation-config/>
該配置隱式註冊了多個對註解進行解析的處理器,如下列舉
AutowiredAnnotationBeanPostProcessor      CommonAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor    RequiredAnnotationBeanPostProcessor

其實,註解本身做不了任何事情,和XML一樣,只起到配置的作用,主要在於背後強大的處理器

另外,比較建議使用@Resource註解
而不要使用@Autowired註解
因為@Autowired註解是Spring提供的,而@Resource註解是J2EE提供的
在JDK6中就已經包含@Resource註解了,所以它沒有跟Spring緊密耦合
並且在使用Spring時,若使用了JSR-250中的註解,如@Resource//@PostConstruct//@PreDestroy
那麼還需要Spring安裝目錄中的SPRING_HOME//lib//j2ee//common-annotations.jar包的支援
這裡面的@Resource註解就是在SPRING_HOME//lib//j2ee//common-annotations.jar中的

 

@Resource註解
@Resource註解和@Autowired一樣,也可以標註在欄位或屬性的setter方法上
@Resource預設按名稱裝配,名稱可以通過name屬性指定。當找不到與名稱匹配的bean時,才會按型別裝配
若註解標註在欄位上且未指定name屬性,則預設取欄位名作為bean名稱尋找依賴物件
若註解標註在setter上且未指定name屬性,則預設取屬性名作為bean名稱尋找依賴物件
如果沒有指定name屬性,並且按照預設的名稱仍找不到依賴物件時,它就會按型別匹配
但只要指定了name屬性,就只能按名稱裝配了

 

@Autowired註解
@Autowired預設是按型別裝配物件的,預設情況下它要求依賴物件必須存在
如果允許null值,可以設定它的required屬性為FALSE,如@Autowired(required=false)
若想要按名稱裝配,可以結合@Qualifier註解一起使用,如@Autowired(required=false)  @Qualifier("personDaoBean")

 


 

Spring2.5的元件自動掃描
在一個稍大的專案中通常會有上百個元件,如果都使用XML的bean定義來配置元件的話
顯然會增加配置檔案的體積,查詢及維護也不方便
Spring2.5就為我們引入了元件自動掃描機制
它可以在classpath下尋找標註了@Service、@Repository、@Controller、@Component註解的類
並把這些類納入Spring容器中管理,它的作用和在XML中使用bean節點配置元件是一樣的
使用自動掃描機制,則需配置<context:component-scan base-package="com.jadyer"/>啟動自動掃描
其中base-package指定需要掃描的包,它會掃描指定包中的類和子包裡面類
@Service用於標註業務層元件
@Repository用於標註資料訪問元件,即DAO元件
@Controller用於標註控制層元件,如Struts中的Action
@Component泛指元件,當元件不要好歸類時,可以使用這個註解進行標註

 

1、可以使用諸如@Service("personDao")修改bean名稱,而它預設的是將首字母小寫的類名作為<bean>名稱
2、若要更改<bean>作用域的話,可以使用@Scope("prototype")註解來修改<bean>作用域
3、若想讓<bean>例項化之後去執行初始化方法,可以使用@PostConstruct標註在方法上
4、同樣@PreDestroy註解標註在方法上,可以用來指定<bean>銷燬時執行的方法
這裡的@PostConstruct是EJB3裡面用來初始化bean的註解,它也不是Spring中的註解
並且<context:component-scan base-package=""/>的背後註冊了很多用於解析註解的處理器
其中就包括了<context:annotation-config/>配置項裡面的註解所使用的處理器
所以配置了<context:component-scan base-package="">之後便無需再配置<context:annotation-config>