spring里面的context:component-scan

Posted 枯木fc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring里面的context:component-scan相关的知识,希望对你有一定的参考价值。

原文:http://jinnianshilongnian.iteye.com/blog/1762632

component-scan的作用的自动扫描,把扫描到加了注解Java文件都注册成bean

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

 

今天在看一个代码项目时,看到有人使用了类似如下配置。看字面意思是要把@Service的注解包括进来,把@Controller的注解排除在外。

然后那个代码分别在Springmvc的配置文件里面把@Service和@Repository排除,在Spring配置文件中把@Controller排除。

至于为什么要排除,我起初以为性能问题,比如springmvc只需要关注controller,spring只需要关注service和repository。但是这是错误的认识,具体原因在最前面那个链接里有。

同时include-filter也可以把base-packge包之外的其他包的给包括进来。

include-filter如果放在exclude-filter后面则会报错。

<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>

 

同时,context:component-scan还有一个默认属性use-default-filters="true",默认是true,即扫描Component(包括service、controller和repository)

当只想包括某个注解时,需要显式关闭这个属性

 

<context:component-scan base-package="com.target" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

 

以上是关于spring里面的context:component-scan的主要内容,如果未能解决你的问题,请参考以下文章

spring框架里面处理中文匹配

spring容器已经启动,我怎么动态的加载里面的某个bean

SpringBoot中在普通类里面加载Spring容器中的类

如何获取spring boot application.yml里面的值

Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别

求救啊,extjs 表单里面的值 提交了,怎么用 spring 管理注入的 相应的类里面