精华内容
下载资源
问答
  • BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作的 1、BeanFactoryPostProcessor:BeanFactory的后置处理器; 在BeanFactory标准初始化之后调用;所有的bean定义已经保存加载到BeanFactory...

    BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作的
    1、BeanFactoryPostProcessor:BeanFactory的后置处理器;
                在BeanFactory标准初始化之后调用;所有的bean定义已经保存加载到BeanFactory,但是bean的实例还没创建;

        BeanFactoryPostProcessor原理:
        1.1 ioc容器创建对象
        1.2 invokeBeanFactoryPostProcessors(BeanFactory); 执行BeanFactoryPostProcessor;
            如何找到所有的BeanFactoryPostProcessor并执行他们的方法;
                1.2.1 直接在BeanFactory中找到所有类型是BeanFactoryPostProcessor的组件,并执行他们的方法
                1.2.2 在初始化创建其他组件前面执行

    2、BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor
            postProcessBeanDefinitionRegistry();
            在所有bean定义信息将要被加载,bean实例还未创建的;

            优先于BeanFactoryPostProcessor执行;
            利用BeanDefinitionRegistryPostProcessor给容器中在额外添加一些组件;

        原理:
            2.1、ioc创建对象
            2.2、refresh()->invokeBeanFactoryPostProcessors(beanFactory);
            2.3、从容器中获取到的BeanDefinitionRegistryPostProcessor组件。
                2.3.1 依次触发所有的postProcessBeanDefinitionRegistry()方法
                2.3.2 再来触发postProcessBeanFactory()方法BeanFactoryPostProcessor;
            2.4、再来从容器中找到BeanFactoryPostProcessor组件;然后依次触发postProcessBeanFactory()方法

    3、ApplicationListener:监听容器中发布的事件。事件驱动模型开发;
        public interface ApplicationListener<E extends ApplicationEvent>
            监听ApplicationEvent 及其下面的子事件;

    步骤:
        1、写一个监听器来监听某个事件(ApplicationEvent及其子类)
        2、把监听器加入到容器;
        3、只要容器中有相关事件的发布,我们就能监听到这个事件;
                ContextRefreshedEvent:容器刷新完成(所有bean都完全创建)会发布这个事件;
                ContextClosedEvent:关闭容器会发布这个事件;
        4、发布一个事件;
                applicationContext.publishEvent();

    原理:
        ContextRefreshedEvent、IOCTest_Ext$1[source=自己的事件!!]、ContextClosedEvent;

    1、ContextRefreshedEvent事件:
        1.1 容器创建对象:refresh();
        1.2 finishRefresh();容器刷新完成会发布ContextRefreshedEvent
        1.3 publishEvent(new ContextRefreshedEvent(this));【事件发布流程】
                    1.3.1 获取事件的多波器(派发器):getApplicationEventMulticaster()
                    1.3.2 MulticasterEvent派发事件:
                    1.3.3 获取到所有的ApplicationListener
                            for(final ApplicationListener<?> listener : getApplicationListeners(event, type))
                            1.3.3.1 如果有Executor,可以支持使用Executor进行异步派发;
                                    Executor executor = getTaskExecutor();
                            1.3.3.2 否则,同步的方式直接执行listener方法;invokeListener(listener, event);
                                    拿到listener回调onApplicationEvent方法;    

    2、发布自己的事件;
    3、容器关闭会发布ContextClosedEvent

    【事件多波器(派发器)】
        1、容器创建对象:refresh();
        2、initApplicationEventMulticaster();初始化ApplicationEventMulticaster;
            2.1 先去容器中找到有没有id="applicationEventMultcaster"的组件;
            2.2 如果没有this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);
                并且加入到容器中,我们就可以在其他组件要派发事件,自动注入这个applicationEventMulticaster;

    【容器中有哪些监听器】
        1、容器创建对象:refresh();
        2、registerListeners();
        String[] listenerBeanNames = getBeanNamesForType(ApplicationListener.class, true, false);
        //将listener注册到ApplicationEventMulticaster中
        getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);
     

    package com.spring.ext;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    import com.spring.bean.Red;
    
    
    @ComponentScan("com.spring.ext")
    @Configuration
    public class ExtConfig {
    	
    	@Bean
    	public Red blue() {
    		return new Red();
    	}
    	
    }
    package com.spring.ext;
    
    import org.springframework.context.ApplicationEvent;
    import org.springframework.context.ApplicationListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyApplicationListener implements ApplicationListener<ApplicationEvent>{
    
    	public void onApplicationEvent(ApplicationEvent event) {
    		System.out.println("event>>>>>>>>"+event);
    	}
    	
    }
    
    package com.spring.ext;
    
    import java.util.Arrays;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
    import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    
    	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    		System.out.println("MyBeanFactoryPostProcessor ... postProcessBeanFactory beansize="+beanFactory.getBeanDefinitionCount());
    		int count = beanFactory.getBeanDefinitionCount();
    		String[] names = beanFactory.getBeanDefinitionNames();
    		System.out.println("当前BeanFactory中有"+count+"个Bean");
    		System.out.println(Arrays.toString(names));
    		
    	}
    
    }
    
    package com.spring.ext;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
    import org.springframework.beans.factory.support.AbstractBeanDefinition;
    import org.springframework.beans.factory.support.BeanDefinitionBuilder;
    import org.springframework.beans.factory.support.BeanDefinitionRegistry;
    import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
    import org.springframework.stereotype.Component;
    
    import com.spring.bean.Red;
    
    @Component
    public class MyBenaDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
    
    	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    		System.out.println("MyBenaDefinitionRegistryPostProcessor ..beansize ="+beanFactory.getBeanDefinitionCount());
    		
    	}
    
    	public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
    
    		System.out.println(">>>>>postProcessBeanDefinitionRegistry>>>beansize="+registry.getBeanDefinitionCount());
    		AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Red.class).getBeanDefinition();
    		registry.registerBeanDefinition("hello", beanDefinition);
    	}
    	
    
    }
    
    package com.spring.ext;
    
    import org.springframework.context.ApplicationEvent;
    import org.springframework.context.event.EventListener;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserService {
    	
    	@EventListener(classes= {ApplicationEvent.class})
    	public void listener(ApplicationEvent event) {
    		System.out.println("自己监听><>>>>>>"+event);
    	}
    	
    }
    package com.spring.test;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationEvent;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    import com.spring.ext.ExtConfig;
    
    public class IOCTestOfExt {
    	@Test
    	public void test01() {
    		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ExtConfig.class);
    		
    		applicationContext.publishEvent(new ApplicationEvent("自己的事件!!") {
    		});
    		
    		applicationContext.close();
    	}
    
    }

    展开全文
  • jmeter后置处理器

    2021-02-27 19:43:09
    jmeter后置处理器 作用 当给一个请求添加后置处理器时,那么可以将前一个请求的响应结果传给后一个请求 使用场景 后一个请求需要前一个请求的响应中的结果作为参数时 实施步骤 新建测试计划,添加线程组等 在...

    jmeter后置处理器

    作用

    当给一个请求添加后置处理器时,那么可以将前一个请求的响应结果传给后一个请求

    使用场景

    后一个请求需要前一个请求的响应中的结果作为参数时

    实施步骤

    1. 新建测试计划,添加线程组等

    2. 在加入后置处理器之前先查看前一个请求的响应数据:

      提取响应数据,方便后面后置处理器使用

      在这里插入图片描述

    3. 在请求1中添加后置处理器,如正则表达式处理器,配置如下:

      在这里插入图片描述

    4. 在后一个请求中,输入变量作为参数:

      在这里插入图片描述

      到了这一步,就使得前一个请求的响应结果中的某个数据通过后置处理器传给了后一个请求

    展开全文
  • mp520后置处理器

    2014-12-04 12:36:22
    mp520后置处理器用于MasterCAM软件
  • BeanPostProcessor【interface】:bean的后置处理器; 在bean初始化前后进行一些处理工作;spring底层大量使用; postProcessBeforeInitialization:在初始化之前工作 postProcessAfterInitialization:在初始化...

    BeanPostProcessor【interface】:bean的后置处理器;

    在bean初始化前后进行一些处理工作;spring底层大量使用;

    • postProcessBeforeInitialization:在初始化之前工作

    • postProcessAfterInitialization:在初始化之后工作

    可以作为Bean初始化前后的回调方法;

    //后置处理器:初始化前后进行处理工作
    //将后置处理器加入到容器中
    @Component
    public class MyBeanPostProcessor implements BeanPostProcessor {
    
    	//在初始化之前工作
        //Object bean: 可以对Bean进行再一次封装,也可以直接返回
        //String beanName: Bean的名称
    	@Override
    	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
    		System.out.println("postProcessBeforeInitialization..."+beanName+"=>"+bean);
    		return bean;
    	}
    
    	//在初始化之后工作
    	@Override
    	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
    		System.out.println("postProcessAfterInitialization..."+beanName+"=>"+bean);
    		return bean;
    	}
    }
    
    展开全文
  • 什么是BeanPostProcessor BeanPostProcessor是spring中的后置处理器,spring中的bean的生命周期分为:创建,初始化,销毁。其中,在bean创建,属性赋值之后,会进行bean的初始化操作,而在初始化的前后会通过...

    什么是BeanPostProcessor

    BeanPostProcessor是spring中的后置处理器,spring中的bean的生命周期分为:创建,初始化,销毁。其中,在bean创建,属性赋值之后,会进行bean的初始化操作,而在初始化的前后会通过BeanPostProcessor进行前置和后置增强操作,通过源码分析可知:
    在这里插入图片描述
    在bean的初始化前后确实是通过后置处理器来增强的,而且在spring中的aop实现中,其实增强也是在这里进行的,只是前置处理在aop中是创建相应的bean的,而真正做增强业务的是在后置处理中。

    使用BeanPostProcessor

    搞清楚了BeanPostProcessor的作用,我们也可以在日常开发中来使用它,目的就是通过BeanPostProcessor在IOC容器加载我们的bean,初始化bean的前后进行对某些指定bean进行增强。

    需求

    对容器中Test5这个bean进行增强

    实现类
    @Component
    public class Test6 implements BeanPostProcessor {
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            if (bean instanceof Test5){
                System.out.println("1........." + bean + beanName);
            }
            return bean;
        }
    
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            if (bean instanceof Test5){
                System.out.println("2........." + bean + beanName);
            }
            return bean;
        }
    }
    
    测试
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = DemoApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class DemoApplicationTests {
    
        @Autowired
        private BeanFactory beanFactory;
    
        @Test
        public void contextLoads() {
            Test6 bean =  beanFactory.getBean(Test6.class);
            System.out.println(bean);
    
        }
    
    }
    
    结果

    在这里插入图片描述
    测试可得出,在Test5被初始化前后被进行了增强。

    展开全文
  • spring是如何获取后置处理器的,又是按照什么顺序来执行这些后置处理器的,看完这篇文章你进全懂了
  • 2.5、调用后置处理器

    2020-08-18 23:54:41
    在idea中搜索了一下Spring的后置处理器(PostProcessor),找出了下图的几个 本文主要来分析红框中标出的两个,也就是在 refresh() 方法的第5步调用的后置处理器 1、后置处理器调用的时机 2、后置处理器调用的顺序 ...
  • Spring-后置处理器

    2017-05-23 11:29:00
    后置处理器】  1.创建一个类实现BeanPostProcessor接口    2.后置处理器声明    3.注意事项  (1)后置处理器在初始化方法前和后执行功能扩展。即使对象中没有初始化的方法,后置处理器也会被调用。 ...
  • Day14——后置处理器

    2020-01-29 15:36:40
    前面Day13——Bean对象的生命周期涉及到后置处理器。今天详细讲一下后置处理器。 二. 储备知识 后置处理器允许在调用初始化方法前后对bean进行额外的处理 bean后置处理器对Spring IOC容器里的所有bean实例逐一处理...
  • Spring后置处理器

    2016-08-04 20:47:14
    Spring后置处理器
  • BeanFactory的后置处理器什么?2. BeanFactory的后置处理器分类3. BeanFactory的后置处理器使用3.1 BeanDefinitionRegistryPostProcessor 带注册功能的3.2 BeanFactoryPostProcessor 不带注册功能的4. ...
  • spring后置处理器

    千次阅读 2019-01-12 14:27:09
    bean的后置处理器,主要在bean初始化前后工作。接口定义: public interface BeanPostProcessor { // 在初始化方法(如:afterPropertiesSet 或 init-method)执行前触发 @Nullable default Object ...
  • JMeter后置处理器

    2020-03-31 10:59:58
    后置处理器在发出采样器请求之后执行。 CSS/JQuery提取器 JSON JMESPath Extractor JSON提取器 正则表达式提取器 边界提取器 JSR233后置处理程序 JDBC后置处理程序 XPath2 Extractor XPath提取器 结果状态处理器 ...
  • AES 解密后置处理器

    2019-08-12 12:45:01
    一.AES 解密后置处理器截图: 二.AES 解密后置处理器使用说明: 密码:AES解密密码; 填充算法:CBC NOPADDING; 目标变量名:如上图AES解密结果存放到aesDecrypt变量中,使用时,以${aesDecrypt}这种形式引用即可...
  • spring 的后置处理器

    2019-09-12 19:43:19
    spring 的后置处理器 post 表示后的意思, 如 postgrel spring 的后置处理器 只要实现 BeanPostProcessor 接口, 注入到Spring IoC容器. Object postProcessBeforeInitialization(Object bean,...
  • UG后置处理器定制培训,UG文件的参数设置,G代码 M代码的设置
  • Spring BeanFactoryPostProcess 后置处理器 在Spring 中有两大后置处理器,BeanFactoryPostProcessor, BeanPostProcessor, 从Spring源码中我们知道,在初始ApplicationContext的时候就添加了一个...
  • BeanFactory ...BeanFactoryPostProcessor:BeanFactory后置处理器 ConfigurationClassPostProcessor:解析配置类的BeanFactory后置处理器 Bean BeanPostProcessors:Bean 初始化前后执行的后置处理器 ...
  • Spring之BeanFactory后置处理器 写在前面 BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作 BeanFactoryPostProcessor => BeanFactory后置处理器 在beanFactory标准初始化之后调用 所有...
  • 在Sping的整个生命周期中,有9个地方调用后置处理器。这些后置处理器是spring实现自定义功能或者扩展spring的核心所在 一、postProcessBeforeInitialization 该方法属于InstantiationAwareBeanPostProcessor后置...
  • BeanFactoryPosProcessor后置处理器,也称之为IOC容器后置处理器。他作用于IOC容器中的Bean创建之前(实例化之前),其主要用途为转换器的加载。他在IOC容器中的生命周期如下图所示: (一)...
  • jmeter——后置处理器

    2020-12-29 00:18:05
    1.1 什么是关联? 将请求1的输出 作为 请求2 的输入,则称之为关联,就是接口之间数据存在依赖关系 例如:“用户登录”请求中服务器返回了token,“查询用户信息”请求需要把token返回给服务器进行验证 1.2 正则...
  • BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作...BeanFactoryPostProcessor是什么:beanFactory的后置处理器; * 在BeanFactory标准初始化之后调用,来定制和修改BeanFactory的内容; * ...
  • 主要介绍了Spring中的后置处理器BeanPostProcessor详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Spring后置处理器BeanPostProcessor Spring提供了许多扩展点,如FactoryBean、Aware,这里还有BeanPostProcessor 在Spring的生命周期中,BeanPostProcessor在初始化前后处理bean。 Spring中的bean每个都会经过Bean...
  • 数控编程后置处理器的发展探究.pdf
  • spring源码:九大后置处理器

    千次阅读 2020-05-31 09:14:11
    spring在完成一个bean的初始化、实例化的过程中,会用到九个后置处理器;本文梳理出这九个后置处理器 九大后置处理器 spring在初始化的过程中,会在九个地方分别调用了五个后置处理的九个方法 第一次调用后置处理器...
  • 后置处理器大类分为容器级别的后置处理器以及Bean级别的后置处理器: BeanDefinitionRegistryPostProcessor public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor { void ...
  • 3DES解密后置处理器

    2019-12-07 20:47:05
    一.3DES解密后置处理器截图: 二.3DES解密后置处理器使用说明: 密钥:解密密钥; 目标变量名:如上图3DES解密结果存放到plaintext变量中,使用时,以${plaintext}这种形式引用即可。 三、下载地址: 链接:...
  • 一、使用场景  json extractor后置处理器用在返回格式为json的HTTP请求中,用来获取...后置处理器—>JSON Extractor 步骤二:在查看结果树中,通过json path expression找到需要的json值 步骤三...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,012
精华内容 12,404
关键字:

后置处理器是什么