使用spring 自定义扫描bean

在我们使用spring boot时候 spring会默认扫描启动类所在包以及下级包的bean,但是我们又想扫其他的包 又不想放在启动类的同级或子级包的时候该怎么做呢? 其实spring提供给了我们扩展接口的,这时候就可以实现BeanFactoryPostProcessor接口实现 postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)方法,入参是beanFactory,这时候我们就可以这样写,使用创建扫描器传入注册器 然后设置包名和包括的过滤器和排除的过滤器,再调用scan方法传入包名(支持数组),然后通过实现ApplicationContextAware 接口获取到应用上下文来getBean 测试

复制代码

 1     @Override
 2     public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
 3 
 4         ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner((BeanDefinitionRegistry) beanFactory, true);
 5 
 6 //        scanner.addExcludeFilter(new TypeFilter() {
 7 //            @Override
 8 //            public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
 9 //                return true;
10 //            }
11 //        });
12 //        scanner.addIncludeFilter(new TypeFilter() {
13 //            @Override
14 //            public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
15 //                return true;
16 //            }
17 //        });
18         scanner.scan("com.demo");
19         DemoController demoController = context.getBean(DemoController.class);
20         System.out.println(demoController.hello());
21     }

 因为当前web环境使用的spring上下文实现了BeanDefinitionRegistry接口  registerBeanDefinition方法就会往容器中注册 BeanDefinition 更详细的查看源码


 

ok
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值