美文网首页
PostProcessor的种类:

PostProcessor的种类:

作者: 码而优则仕 | 来源:发表于2020-06-30 19:22 被阅读0次

PostProcessor的种类:

大类分为容器级别的后置处理器和 Bean 级别的后置处理器

  • BeanDefinitionRegistryPostProcessor

    BeanDefinition 的自定义注册

    /**
     * @author wsq
     * @version CustomizedBeanDefinitionRegistryPostProcessor.java  2020/6/29  上午9:02 上午
     * 这个功能可以做什么事情?可以在这个接口里面搜索第三方的 Class,并将这些Class注册进Spring 容器中,这样就可以在复用第三方
     * 代码;mybatis框架就是这么做的
     */
    @Configuration
    public class CustomizedBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
    
    
       @Override
       public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
          Class<?> userClass = User.class;
          BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(userClass);
          GenericBeanDefinition definition = (GenericBeanDefinition) builder.getRawBeanDefinition();
          registry.registerBeanDefinition("user5", definition);
       }
    
       @Override
       public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    
       }
    }
    
  • BeanFactoryPostProcessor

    容器后置处理器

  • BeanPostProcessor

    Bean的后置处理器,容器创建的每个Bean实例,创建Bean已经是依赖注入部分的知识了。容器创建的Bean实例,后置器都会在调用容器初始化之前和Bean实例初始化之后,都可以从容器获得回调执行。

    @Configuration
    public class CustomizedBeanPostProcessor implements BeanPostProcessor {
    
       @Override
       public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
          System.out.println(beanName + "调用了 postProcessBeforeInitialization");
          //对 bean做任何操作,处理
          return bean;
       }
    
       @Override
       public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
          System.out.println(beanName + "调用了 postProcessAfterInitialization");
          //对 bean做任何操作,处理
          return bean;
       }
    }
    
public static void main(String args[]) {
   System.out.println("Spring 项目成功编译!!!!走注解使用Spring");
   ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Entrance.class);
   WelcomeService ws = (WelcomeService) applicationContext.getBean("welcomeServiceImpl");
   ws.sayHello("wsq");
   WelcomeController controller = (WelcomeController) applicationContext.getBean("welcomeController");
   controller.doRequest();
   String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
   for (String beanDefinitionName : beanDefinitionNames) {
      System.out.println(beanDefinitionName);
   }
   User user5 = (User) applicationContext.getBean("user5");
   System.out.println("CustomizedBeanDefinitionRegistryPostProcessor 注册的额外对象" + user5);
}

输出:

Spring 项目成功编译!!!!走注解使用Spring
entrance调用了 postProcessBeforeInitialization
entrance调用了 postProcessAfterInitialization
welcomeServiceImpl调用了 postProcessBeforeInitialization
welcomeServiceImpl调用了 postProcessAfterInitialization
welcomeController调用了 postProcessBeforeInitialization
welcomeController调用了 postProcessAfterInitialization
welcomeDao调用了 postProcessBeforeInitialization
welcomeDao调用了 postProcessAfterInitialization
user5调用了 postProcessBeforeInitialization
user5调用了 postProcessAfterInitialization
Hellow :wsq
Hellow :来自Controller的调用问候
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
entrance
welcomeController
welcomeDao
customizedBeanDefinitionRegistryPostProcessor
customizedBeanPostProcessor
welcomeServiceImpl
user5
CustomizedBeanDefinitionRegistryPostProcessor 注册的额外对象cn.com.yuns.entity.User@2c34f934

通过输出我们会发现customizedBeanDefinitionRegistryPostProcessor,customizedBeanPostProcessor这个两个PostProcessor后置处理器没有被增强,Spring中 PostProcessor后置处理器是不会被增强的。

框架本身提供了很多ignre方法逻辑,忽略某些类的增强和执行。--主要就是按照某些规则排出掉某些类

相关文章

网友评论

      本文标题:PostProcessor的种类:

      本文链接:https://www.haomeiwen.com/subject/qkqfqktx.html