21.spring源码之ImportBeanDefinitionRegistrar接口的应用

在Import注解的的收集中,如果Import导入的类是ImportBeanDefinitionRegistrar类型的,那么会放入一个容器中,最后会调用它的registerBeanDefinitons()方法。假设有这样一个需求,有个项目不是spring开发的,没有注解,现在想要把这个项目集成到我们的spring项目来,想把原本项目的实例交给spring管理,我们就可以通过ImportBeanDefinitionRegistrar接口来是实现。

1.自定义一个注解导入实现了ImportBeanDefinitionRegistrar接口的类

2.创建一个扫描器类继承自ClassPathBeanDefinitionScanner

不使用默认的过滤器

3.创建这个被导入实现了ClassPathBeanDefinitionScanner接口的类

我们看下addIncluderFilter()这个方法的参数

而这个TypeFilter接口有一个方法

而我们前面学过组件扫描,代码如下

可想而知,只要我们重写的这个match方法为true,那么要扫描包下的所有类都会封装成BeanDefinition,不需要你有注解。那么只要在我们的项目中通过加上我们这个自定义的注解,就可以把你想要扫描的包下的类都交给spring管理

我们的@Component注解是只扫描com.enjoy.AnnotationBean包的,但是我们在ScanBean上添加了我们的自定义注解@BeanScan,去测试一下看能不能把com.practice.soft包下的类实例化

测试

 

posted @ 2021-08-16 21:06  福福猿  阅读(290)  评论(0)    收藏  举报