spring框架提供了很好的扩展性,提供了一些高级接口,方便用户扩展,其他的项目,包括springboot mybatis等等才会更加方便的整合spring。
1、BeanPostProcessor 这是用户能自己操作spring的bean的接口,具体代表意义的实现类就是spring的aop :AbstractAutoProxyCreator
该类通过重写postProcessBeforeInstantiation方法 提前生成spring的代理对象,继而装载到spring的容器当中
2、BeanFactoryPostProcessor 通过操作beanDefinition 而改变bean的对象 常用的实现: PropertyResourceConfigurer 替换占位符;ConfigurationClassPostProcessor 这个类实现了BeanDefinitionRegistryPostProcessor接口,该接口实现了BeanFactoryPostProcessor接口,是spring中重中之重的类,后续详细讲解 其中的BeanDefinitionRegistryPostProcessor 也就是第三个要提到的接口
3、BeanDefinitionRegistryPostProcessor 该接口能拿到BeanDefinitionRegistry 也就是beanDefinition的注册器,能动态往spring的beanDefinitionMap中注册新的beanDefinition对象ConfigurationClassPostProcessor 类是spring内部的beanFactoryPostProcesssor对象的实现类 也就是在spring容器在启动时候会被调用的类,会调用processConfigBeanDefinitions 大概就是把扫描到的类信息加载到beanDefinitionMap中
4、ImportSelector springboot的自动装配就是通过import的类实现了该接口,然后读取到spring.factories下面所有的自动装配类 然后通过BeanDefinitionRegistryPostProcessor的处理 加载到spring容器中
5、ImportBeanDefinitionRegistrar mybatis的MapperScan注解的实现 也是通过拿到registry对象,然后通过扫描包 然后设置类为MapperFactoryBean 通过动态代理的方式生成Dao接口的动态代理实现类