文章断更四个月了,家里有个小宝宝还真是费精力呀。这个文章也很简单,就是一个示例,看了就会用。为什么要写着呢?大家相比有过这样的一种情况:引入了一个第三方的客户端,需要输入客户端中的Bean,这个时候如果不做配置的话,默认是取不到三方客户端的Bean的。那么有了@ComponentScans这个注解,就可以很方便地获取Bean了。
使用方法
1 |
|
1 | import org.springframework.core.type.filter.TypeFilter; |
1 |
|
说明
- ①:当我们使用了
@ComponentScans
注解后,程序不会和原来一样从Application.java
(即程序入口)所在的包为基准进行组件扫描。 因此,在使用了@ComponentScans
注解之后,需要把自己项目本来的扫描位置给配置上,即@ComponentScan(basePackages = {"cn.jeremysong"})
。basePackages
表示当前@ComponentScan
在指定的包及其子包中扫描搜索符合条件的类。 - ②:
excludeFilters
表示在这个扫描中排除符合某些规则的类。FilterType.ASSIGNABLE_TYPE
这个枚举表示给定的规则为指定的类,在后面 的参数classes
中进行描述。其value
是个数组,将指定的class列举出来即可 - ③:
includeFileters
表示在这个扫描中仅包含符合某些规则的类。FilterType.ASSIGNABLE_TYPE
解释同上 - ④:
FilterType.CUSTOM
这个枚举表示使用自定义的过滤器,自定义过滤器在本实例中是类SmartFilter.class
,具体解释参考第⑦条 - ⑤:
FilterType.REGEX
这个枚举表示使用正则表达式来匹配类名,寻找符合条件的类。pattern
是个数组,可以设置多个正则表达式 - ⑥:
FilterType.ANNOTATION
这个枚举表示过滤被指定拥有指定注解的类,values
中可以配置多个注解。上述实例中用的是自定义的注解Have.class
, 代码参考第⑨条 - ⑦:
SmartFilter
为自定义的 Filter。自定义 Filter 需要继承org.springframework.core.type.filter.TypeFilter
,
重写public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException
方法即可。 - ⑧:返回
true
表示满足条件,返回false
则表示不满足条件。可以根据实际需要来自定义。 - ⑨:自定义注解,按照需要编写即可
欢迎关注我的公众号 须弥零一,跟我一起学习IT知识。
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !