Spring 的几个扩展类概述

版权声明:禁止CV操作 https://blog.csdn.net/H44341466/article/details/84949569

   

   spring中提供了很多扩展点,用来给程序员自己去扩展,从而达到插手bean的实例化过程,那么接下来就简单的介绍几个spring自己提供的几个扩展类,并概述他们的作用;

有兴趣的同学,建议通读spring源码,让你从一个萌新提升为一个技术大牛;从而摆脱重复搬砖的工作;好了,废话少说,上菜:

  1. beanPostProsessor

    插手bean的实例化过程,在bean还没有被spring的bean管理器管理之前做一些事情;

             经典案例:a: @PostConstruct,postConstruct可以处理我们bean的生命周期回调;

                                b: AOP,我们的AOP也是依据beanPostProcessor原理来实现的;

      2. BeanFactoryPostProcessor

          springBean容器中任意的一个bean被实例化之前执行,它有参与我们bean工厂的建设过程功能,其中这里面包括spring自有的以及我们我们自己定义的(我们自己定义的不是加了注解的,而是我们手动添加的,你可以实现BeanFactoryPostProcessor,也可以实现它的子类BeanDefinitionRegistryPostProcessor,它的执行顺序是先执行程序员自己定义的然后再执行spring的,先执行实现BeanDefinitionRegistryPostProcessor的,后执行实现BeanFactoryPostProcessor,不要问我为什么,spring源码就是这样写的)这个类里面的这个方法PostProcessBeanFactory(...)这个方法就可以实现在配置类上加上cglib动态代理。;

附上一段我自己定义的代码,看下什么是手动添加:

//测试自定义的BeanFactoryPostProcessor
//		BeanFactoryPostProcessor beanFactoryPostProcessor = new MyBeanFactoryPostProcessor();
//		annotationConfigApplicationContext.addBeanFactoryPostProcessor(beanFactoryPostProcessor);

		//测试我们自己定义的BeanDefinitionRegistryPostProcessor
//		BeanFactoryPostProcessor beanFactoryPostProcessor1 = new MyBeanDefinitionRegistryPostProcessor();
//		annotationConfigApplicationContext.addBeanFactoryPostProcessor(beanFactoryPostProcessor1);

  3.BeanDefinitionRegistryPostProcessor

    上面已经提到过,是BeanFactoryPostProcessor的子类,其中有个经典的就是我们spring自带的一个类        ConfigurationClassPostProcessor,这个类是实现了BeanDefinitionRegistryPostProcessor接口,它可以完成对我们bean的扫描,以及3种import的处理,以及@Bean的扫描,还有判断我们的配置类是否是一个完整的配置类,也就是是否有@Configuration注解,来判断是否使用cglib代理;

4.ImportSelector

   看下这个接口的方法

String[] selectImports(AnnotationMetadata importingClassMetadata);

实际上它可以返回一个我们bd的数组,它可以对bd层面进行一些操作;

5.ImportBeanDefinitionRegistrar

  这个接口其实是对ImportSelector这个接口的功能扩展,来看下它里面的方法

public void registerBeanDefinitions(
      AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry);

这里我们可以拿到BeanDefinitionRegistry,有了这个类我们可以把对bean做一些处理,其实mybatis就是实现了这个接口来进行它的一系列操作的;

新手,写博客很随意,不喜勿喷!!!!!

   

     

           

         

         

猜你喜欢

转载自blog.csdn.net/H44341466/article/details/84949569