Spring注解驱动第三讲
Posted xingjia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring注解驱动第三讲相关的知识,希望对你有一定的参考价值。
上一讲主要针对@ComponentScan注解做了一些说明,本文主要对@Filter的扫描条件,再做一些详细的介绍
1,FilterType.ANNOTATION 按照注解的方式进行扫描.后面classes属性,为注解的类型,如:
@Configuration//标记此类为配置类 @ComponentScan(value="com.wxj",excludeFilters= @Filter(type=FilterType.ANNOTATION,classes= Controller.class) ) public class MainConfig //将标有@Controller注解的类排除在外不会加载到容器中来
2,type=FilterType.ASSIGNABLE_TYPE,按照指定的类,进行过滤,后面的classes属性的值为"类名.class".如:
@Configuration//标记此类为配置类 @ComponentScan(value="com.wxj", includeFilters= @Filter(type=FilterType.ASSIGNABLE_TYPE,classes= BookService.class) ,useDefaultFilters=false) public class MainConfig //只会加载BookService,以及BookService的子类或者其实现类
以上两种方式为常用的过滤方式.
3,FilterType.CUSTOM,按照自己自定义的方式来进行过滤和筛选(使用此过滤类型,虽然比较繁琐,但是使用起来完全可以由自己来定义扫描的规则)
首先定义@Filter注解的类型
@Configuration//标记此类为配置类 @ComponentScan(value="com.wxj", includeFilters= @Filter(type=FilterType.CUSTOM,classesMyTypeFilter.class) ,useDefaultFilters=false) public class MainConfig
MyTypeFilter即为自己定义的匹配方法,其中MyTypeFilter类中的match方法的返回值为true时,为符合过滤条件,如果返回为false,则不符合过滤条件,代码如下:
public class MyTypeFilter implements TypeFilter /** * MetadataReader metadataReader:获取当前正在扫描的类的信息 * MetadataReaderFactory metadataReaderFactory,获取带其他任何类的信息 * */ public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();//获取当前类的注解信息 ClassMetadata classMetadata = metadataReader.getClassMetadata();//获取当前扫描的类信息 Resource resource = metadataReader.getResource();//获取当前扫描的资源信息 String name = classMetadata.getClassName();//获取类的名字 if(name.contains("er")) return true;//如果类的名字中带有"er",则符合过滤的要求 return false;
注:TypeFilter中的ASPECTJ和REGEX(正则方式),没有介绍,使用较少,有兴趣可以自行研究.
以上是关于Spring注解驱动第三讲的主要内容,如果未能解决你的问题,请参考以下文章
Spring注解驱动开发第20讲——使用@Autowired@Qualifier@Primary这三大注解自动装配组件,你会了吗?