Spring对象初始化前后执行操作

文章目录

  • Spring对象初始化前后执行操作
  • 实例

Spring对象初始化前后执行操作

功能: 通过一个实现 BeanPostProcessor 接口的类,并将该类对象注册到spring中。使所有spring对象的初始化前后执行都执行一个自定义方法

步骤:

  1. 创建一个实现 BeanPostProcessor 接口的类

    ps : 创建多个 BeanPostProcessor 接口的类,还需要实现 Ordered 接口来,来确定方法执行顺序的优先级,返回数值越小优先级越高,最小值为0。

  2. 在xml配置文件中,注册bean对象的后置处理器(也就是实现BeanPostProcessor接口类的bean对象)

实例

BeanPostProcessor 接口的类

public class MyBeanPostProcessor implements BeanPostProcessor{
	/* 
	 * 本方法一定要返回bean对象
	 */
	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		System.out.println(beanName+"对象初始化前...");
		return bean;
	}

	/* 
	 * 本方法一定要返回bean对象
	 */
	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		System.out.println(beanName+"对象初始化后...");
		return bean;
	}
}

xml配置文件注册上面的类bean对象


 	<bean class="com.bb.processor.MyBeanPostProcessor" id="beanPostProcessor">bean>

测试类对象

public class UserService {
	private String name;
	
	public UserService(){
		System.out.println("构造方法执行...");
	}
	
	public void setName(String name) {
		System.out.println("设值注入...");
		this.name = name;
	}
	
	@PostConstruct
	public void init(){
		System.out.println("初始化...");
	}
}

ps@PostConstruct 注解方法,该方法会在该类对象初始化时执行。不要文件在xml配置文件中开启注解扫描

<context:annotation-config>context:annotation-config>

测试方法

@Test
	public void test2(){
		ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService us = (UserService) ac.getBean("userService");
		ac.registerShutdownHook();
	}

打印输出

构造方法执行...
设值注入...
userService对象初始化前...
初始化...
userService对象初始化后...

总结 :通过一个简简单单的 BeanPostProcessor 接口实现类,所有的spring对象在初始化前后都会执行自定义方法。

你可能感兴趣的:(Spring)