最近在研究Spring中<context:annotation-config/>配置的作用,現(xiàn)記錄如下:
<context:annotation-config/>的作用是向Spring容器注冊(cè)以下四個(gè)BeanPostProcessor:
- AutowiredAnnotationBeanPostProcessor
- CommonAnnotationBeanPostProcessor
- PersistenceAnnotationBeanPostProcessor
- RequiredAnnotationBeanPostProcessor
那么,為什么要注冊(cè)這四個(gè)BeanPostProcessor呢?
是為了讓系統(tǒng)能夠識(shí)別相應(yīng)的注解。
例如:
1、如果想使用@Autowired注解,那么就必須事先在 Spring 容器中聲明 AutowiredAnnotationBeanPostProcessor Bean。
傳統(tǒng)聲明方式如下:
<bean class="org.springframework.beans.factory.annotation. AutowiredAnnotationBeanPostProcessor "/>
2、如果想使用@ Resource 、@ PostConstruct、@ PreDestroy等注解就必須聲明CommonAnnotationBeanPostProcessor Bean。
3、如果想使用@PersistenceContext注解,就必須聲明PersistenceAnnotationBeanPostProcessor的Bean。
4、如果想使用@Required的注解,就必須聲明RequiredAnnotationBeanPostProcessor的Bean。
以上這些注解是很常用的,如果按照傳統(tǒng)的方式進(jìn)行配置將會(huì)非常繁瑣,所以Spring給我們提供了一個(gè)簡(jiǎn)便的方式:<context:annotation-config/>,使用該元素可以自動(dòng)聲明以上注解。
注:由于<context:component-scan base-package=”xx.xx”/>也包含了自動(dòng)注入上述Bean的功能,所以<context:annotation-config/> 可以省略。如果兩者都進(jìn)行了配置,則只有前者有效。
注:
<context:annotation-config> 是用于激活那些已經(jīng)在spring容器里注冊(cè)過(guò)的bean(無(wú)論是通過(guò)xml的方式還是通過(guò)package sanning的方式)上面的注解。
<context:component-scan>除了具有<context:annotation-config>的功能之外,<context:component-scan>還可以在指定的package下掃描以及注冊(cè)javabean 。
|