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包下的类实例化

测试

浙公网安备 33010602011771号