天天看點

spring标簽context:component-scan和context:annotation-config學習總結

1.  <context:annotation-config>學習總結

使用spring的BeanPostProcessor時,要先在spring容器中聲明要使用BeanPostProcessor,比如要使用@Autowired注解就必須要向spring容器中聲明相應的BeanPostProcessor

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

以此類推使用其他的BeanPostProcessor也需要先向spring容器中聲明。

Spring提供了<context:annotation-config>來簡化配置。

該配置是隐式地向 Spring容器注冊

AutowiredAnnotationBeanPostProcessor、

RequiredAnnotationBeanPostProcessor、

CommonAnnotationBeanPostProcessor

以及PersistenceAnnotationBeanPostProcessor這4個BeanPostProcessor。

2.  <context:component-scan>學習總結

使用Spring的都會知道怎樣在spring容器中配置一個自己的bean,那就是使用<bean>标簽

<bean id="dog" class="anno.demo01.pojo.Husky"></bean>
           

如果不想在spring的容器中配置一個一個的<bean>标簽,那麼就可以使用注解配置實作bean的自動載入。

<context:component-scan base-package="anno.demo01.pojo" />

該配置包含了<context:annotation-config>的配置,是以配置了<context:component-scan>就不用配置<context:annotation-config>

<context:component-scan>中需要指定一個包名base-package,如果在指定包名及其子包下的某個類上有@Component,@Repository,@Service,@Controller注解,就會将這個對象作為Bean注入進容器當中。

其中需要注意的是

@Component

是所有受Spring管理元件的通用形式;而

@Repository

@Service

和 

@Controller

則是

@Component

的細化,用來表示更具體的用例(

@Repository

對應持久化層、

@Service

對應

服務層,

@Controller

對應

表現層)。也就是說,能用

@Component

來注解的元件類,但如果用

@Repository

@Service

 或

@Controller

來注解它們,你的類也許能更好地被工具處理,或與切面進行關聯。

<!--指定anno包及其子包下要掃描的注解-->

<context:component-scan base-package="anno">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  </context:component-scan>
           
<!--指定anno包及其子包下不要掃描的注解-->

<context:component-scan base-package="anno">
    <!--指定要排除的注解-->
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
  </context:component-scan>
           

 ------------------------------------------------

如有錯誤,還請大俠及時指出,多謝!

 ------------------------------------------------