Spring2.5中使用註解裝配屬性and組件自動掃描 收藏spring
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同樣,只起到配置的做用,主要在於背後強大的處理器ide
另外,比較建議使用@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中的ui
@Resource註解
@Resource註解和@Autowired同樣,也能夠標註在字段或屬性的setter方法上
@Resource默認按名稱裝配,名稱能夠經過name屬性指定。當找不到與名稱匹配的bean時,纔會按類型裝配
若註解標註在字段上且未指定name屬性,則默認取字段名做爲bean名稱尋找依賴對象
若註解標註在setter上且未指定name屬性,則默認取屬性名做爲bean名稱尋找依賴對象
若是沒有指定name屬性,而且按照默認的名稱仍找不到依賴對象時,它就會按類型匹配
但只要指定了name屬性,就只能按名稱裝配了spa
@Autowired註解
@Autowired默認是按類型裝配對象的,默認狀況下它要求依賴對象必須存在
若是容許null值,能夠設置它的required屬性爲FALSE,如@Autowired(required=false)
若想要按名稱裝配,能夠結合@Qualifier註解一塊兒使用,如@Autowired(required=false) @Qualifier("personDaoBean")prototype
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泛指組件,當組件不要好歸類時,能夠使用這個註解進行標註component
一、能夠使用諸如@Service("personDao")修改bean名稱,而它默認的是將首字母小寫的類名做爲<bean>名稱
二、若要更改<bean>做用域的話,能夠使用@Scope("prototype")註解來修改<bean>做用域
三、若想讓<bean>實例化以後去執行初始化方法,能夠使用@PostConstruct標註在方法上
四、一樣@PreDestroy註解標註在方法上,能夠用來指定<bean>銷燬時執行的方法
這裏的@PostConstruct是EJB3裏面用來初始化bean的註解,它也不是Spring中的註解
而且<context:component-scan base-package=""/>的背後註冊了不少用於解析註解的處理器
其中就包括了<context:annotation-config/>配置項裏面的註解所使用的處理器
因此配置了<context:component-scan base-package="">以後,便無需再配置<context:annotation-config>xml