annotation之context:annotation-config與 context:component-scan的區別與聯絡

林海靜發表於2018-09-28

註解的作用基本有三個:
1、生成文件:是java 最早提供的註解。常用的有 @see @param @return 等
2、跟蹤程式碼依賴性,實現替代配置檔案功能:比較常見的是spring 2.5 開始的基於註解配置。作用就是減少配置。現在的框架基本都使用了這種配置來減少配置檔案的數量。
3、在編譯時進行格式檢查:如@override 放在方法前,如果你這個方法並不是覆蓋了超類方法,則編譯時就能檢查出。

附:java註解的知識網路


一、共同點

掃描註解,替代get/set方法,完成自動注入

二、不同點

1、 <context:annotation-config/>只掃描註解,不負責建立javabean;只有當自己在xml中手動配置bean後,手動建立的bean已經被註冊到spring容器裡,才能實現自動注入;

2、 <context:component-scan base-package=url/>可以掃描註解;其base-package屬性指定了需要掃描的類包,類包及其遞迴子包中所有的類都會可以建立掃描包下的Javabean,即有這一個配置後,就不用再手動配置bean,只要需要的bean在掃描包下就可以利用註解實現自動注入;概括就是:可以自動將base-package配置包及其遞迴子包下的類自動建立bean並註冊到spring容器中,還能掃描註解,掃描到需要裝配的節點時,代替get/set方法自動注入到所需類的屬性中;

:配置了 <context:annotation-config/>或 <context:component-scan/>後,系統之所以能夠識別相應的註解,是因為此配置隱式的向 Spring 容器註冊了

AutowiredAnnotationBeanPostProcessor、

CommonAnnotationBeanPostProcessor、
PersistenceAnnotationBeanPostProcessor 、

 RequiredAnnotationBeanPostProcessor

 這 4 個BeanPostProcessor ,如果手動配置如下:

@Autowired

 <bean class= "org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />

@ Resource 、@ PostConstruct、@ PreDestroy

<bean class= "org.springframework.beans.factory.annotation.CommonAnnotationBeanPostProcessor" />

@PersistenceContext

<bean class= "org.springframework.beans.factory.annotation.PersistenceAnnotationBeanPostProcessor " />

@Required
<bean class= "org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />

注:如果在配置檔案中配置了<context:component-scan />,就不用在配置<context:annotation-config/>,因為前者已經包含了後者。

相關文章