spring 组件过滤扫描

在使用scan功能时,默认情况下所有的构造型注解标注(@Component,@Service,@Repository,@Controller)的实现类都会被注册为bean

但是在具有限定功能的情况下,可以减小Spring扫描的粒度,提升效率。

下面的规则都可以分为正向的和反向的,即该类型的需要扫描以及该类型的不需要扫描。

<context:component-scan base-package=”被扫描的包路径”>

正向的写在

<context:include-filter type=”5种情况” expression=”如下所示”/>

反向的写在

<context:exclude-filter type=”5种情况” expression=”如下所示”/>


如果应用扫描的话,默认是需要加注解的,但是在非annotation限定模式下则可以不加注解也可以自动识别,具体看下面的例子。

 

1、type=annotation,必须由注解,过滤器扫描使用指定注解所标注的那些类。具体来说,就是@Component@Service@Repository@Controller这几个构造型注解所在的类。

expression=4个值,这种限定方式是必须有@Component等注解的。

org.springframework.stereotype.Component;

org.springframework.stereotype.Controller;

org.springframework.stereotype.Repository;

org.springframework.stereotype.Service;


2、type=assignable,注解不是必要的,过滤器扫描派生于expression属性所指定类型的那些类,所谓的派生,具体的实现类的路径。

expression=接口类路径


3、type=aspectj,过滤器扫描与expression属性所指定的AspectJ表达式所匹配的那些类。


4、type=custom,使用自定义的org.springframework.core.type.TypeFilter实现类,该类由expression属性指定。


5、type=regex,过滤器扫描类的名称与expression属性所指定的正则表达式所匹配的那些类。


我们一般是用maven构建项目,在使用spring加载时,有的时候某些maven module不想把某些路径的类加载进来;或者有些时候由于加载冲突;或者有二次加载等等问题时,就需要exclude一些包。下面的例子:加载组件时,把com.iqiyi.ttbrain.base.dao.db.impl路径下的java组件忽略掉。


	<!-- 注解方式的aop -->
	<aop:aspectj-autoproxy  proxy-target-class="true"/> 
	   
	<!-- 自动搜索Sping的注解类-->
	<context:component-scan base-package="com.iqiyi.ttbrain" >
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
		<context:exclude-filter type="regex" expression="com.iqiyi.ttbrain.base.dao.db.impl.*"/> 
	</context:component-scan> 



举例:http://blog.csdn.net/bestcxx/article/details/52620482


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值