spring的<context:annotation-config>和<context:component-scan>区别

区别:

  • 1、<context:annotation-config>:【自动装配】 是用于激活(@Autowired)那些已经在spring容器里注册过的bean(无论是通过xml的方式还是通过package sanning的方式)。
  • 2、<context:component-scan>:【自动注册+装配】<context:component-scan>除了具有<context:annotation-config />的功能之外,还具有自动将带有@component,@service,@Repository等注解的对象注册到spring容器中的功能。
  • <context:component-scan/>包含了<context:annotation-config/>

<context:component-scan>扫描内容:

  • 1、配置:<context:component-scan base-package="com.test" />

              效果:扫描com.test包下的带有@component,@service,@Repository等注解的类,并注册到spring容器中

  • 2、配置:<context:component-scan base-package="com.test"  use-default-filters="false"/>

            效果:啥也不扫描,也没有向spring注册任何的类

  • 3、配置:

<context:component-scan base-package="com.test" use-default-filters="false">
  <!-- 扫描符合@Service的类 -->
  <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>

              效果:扫描com.test包下的带有@service注解的类,并注册到spring容器中

  • 4、配置:

<context:component-scan base-package="com.test" use-default-filters="false">
 <context:include-filter type="regex" expression="com.test.entity.*" />
</context:component-scan>

              效果:扫描com.test.entity包下的带所有类,并注册到spring容器中

  • 5、配置:

<context:component-scan base-package="com.test" >

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>

              效果:扫描com.test包下的带有@component,@Repository等注解的类,并注册到spring容器中(注意:不包含@service注解的类)

  • 6、配置:
    <context:component-scan base-package="com.test" use-default-filters="false">
      <!-- 扫描符合@Service @Repository的类 -->
      <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
      <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" />
         <context:include-filter type="regex" expression="com.test.entity.*"/>
    </context:component-scan>
    效果:扫描com.test包下的@Service、@Repository注解的实体和com.test.entity包下的所有实体【不会扫描@component等其他注解,因为use-default-filters="false"关闭了默认扫描方式】
  • 总结:
     use-default-filters默认是true,即默认是会扫描base-package包及子包下的@component,@service,@Repository注解,若设置为false,则不扫描@component,@service,@Repository注解
    context:include-filter是以base-package为根目录,自定义添加需要扫描的bean【即不需要添加任何注解都能被扫描的bean】
  • 这只是个人的总结,有错误请指出
区别:
  • 1、<context:annotation-config>:【自动装配】 是用于激活(@Autowired)那些已经在spring容器里注册过的bean(无论是通过xml的方式还是通过package sanning的方式)。
  • 2、<context:component-scan>:【自动注册+装配】<context:component-scan>除了具有<context:annotation-config />的功能之外,还具有自动将带有@component,@service,@Repository等注解的对象注册到spring容器中的功能。
  • <context:component-scan/>包含了<context:annotation-config/>

猜你喜欢

转载自375287760.iteye.com/blog/2400978
今日推荐