欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

生命周期(四)--BeanPostProcessor-后置处理器

程序员文章站 2022-07-12 11:23:12
...

BeanPostProcessor【interface】:bean的后置处理器;
在bean初始化前后进行一些处理工作;
    postProcessBeforeInitialization:在初始化之前工作
    postProcessAfterInitialization:在初始化之后工作
生命周期(四)--BeanPostProcessor-后置处理器
BeanPostProcessor是一个接口,我们需要定义一个类实现接口中的两个方法
创建一个后置处理器,将后置处理器加入到容器中

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;

/**
 * 后置处理器:初始化前后进行处理工作
 * 将后置处理器加入到容器中
 * @author lfy
 */
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {

	/**
	 * bean 容器创建的实例
	 * beanName 实例在容器中的名字
	 */
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		// TODO Auto-generated method stub
		System.out.println("postProcessBeforeInitialization..."+beanName+"=>"+bean);
		return bean;
	}

	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		// TODO Auto-generated method stub
		System.out.println("postProcessAfterInitialization..."+beanName+"=>"+bean);
		return bean;
	}
}

配置类MainConfigOfLifeCycle.java中,我们还是用扫描包的方式将组件加入到容器中,我的MyBeanPostProcessor类路径为com.atguigu.bean

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@ComponentScan("com.atguigu.bean")
@Configuration
public class MainConfigOfLifeCycle {
	
	@Bean(initMethod="init",destroyMethod="detory")
	public Car car(){
		return new Car();
	}
}

测试类IOCTest_LifeCycle.java

import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.atguigu.config.MainConfigOfLifeCycle;

public class IOCTest_LifeCycle {
	
	@Test
	public void test01(){
		//1、创建ioc容器
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
		System.out.println("容器创建完成...");
		
		//关闭容器
		System.out.println("容器进行关闭...");
		applicationContext.close();
	}
}

运行结果:主要可以看到创建bean后先调用了postProcessBeforeInitialization,然后初始化,初始化后调用了postProcessAfterInitialization
生命周期(四)--BeanPostProcessor-后置处理器
就相当于我们之前总结顺序初始化前后多了操作
构造(对象创建)
    单实例:在容器启动的时候创建对象
    多实例:在每次获取的时候创建对象
BeanPostProcessor.postProcessBeforeInitialization
初始化:
    对象创建完成,并赋值好,调用初始化方法。。。
BeanPostProcessor.postProcessAfterInitialization
销毁:
    单实例:容器关闭的时候
    多实例:容器不会管理这个bean;容器不会调用销毁方法;