BeanPostProcessor详解

1.BeanPostProcessor简介

BeanPostProcessor是Spring IOC容器给我们提供的一个扩展接口。接口声明如下

public interface BeanPostProcessor {
    //bean初始化方法调用前被调用
    Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
    //bean初始化方法调用后被调用
    Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}

在这里插入图片描述
运行顺序

=Spring IOC容器实例化Bean=
=调用BeanPostProcessor的postProcessBeforeInitialization方法=
=调用bean实例的初始化方法=
=调用BeanPostProcessor的postProcessAfterInitialization方法=
在这里插入图片描述

package springcode;

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

public class MyBeanPostProcessor implements BeanPostProcessor{
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		System.out.println(beanName+"初始化之前...");
		return bean;
	}
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		System.out.println(beanName+"初始化之后...");
		return bean;
	}

}

2.BeanFactoryPostProcessor简介

bean工厂的bean属性处理容器,说通俗一些就是可以管理我们的bean工厂内所有的beandefinition(未实例化)数据,可以随心所欲的修改属性。在实例化之前可以修改bean的定义。

package springcode;

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{

	@Override
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
		// TODO Auto-generated method stub
		String[] beanDefinitionNames = beanFactory.getBeanDefinitionNames();
		for (int i = 0; i < beanDefinitionNames.length; i++) {
			System.out.println("beanFactory:"+i+beanDefinitionNames[i]);
		}
	}

}

结果:

beanFactory:0org.springframework.context.annotation.internalConfigurationAnnotationProcessor
beanFactory:1org.springframework.context.annotation.internalAutowiredAnnotationProcessor
beanFactory:2org.springframework.context.annotation.internalRequiredAnnotationProcessor
beanFactory:3org.springframework.context.annotation.internalCommonAnnotationProcessor
beanFactory:4org.springframework.context.event.internalEventListenerProcessor
beanFactory:5org.springframework.context.event.internalEventListenerFactory
beanFactory:6config
beanFactory:7myBeanFactoryPostProcessor
beanFactory:8getMyLifeCycle
beanFactory:9getMySmartLifeCycle
beanFactory:10getMyBeanPostProcessor

spring常用的自定义BeanFactoryPostProcessor:

  • PropertyPlaceholderConfigurer

  • 简单配置<context:property‐placeholder location=“classpath”/>

  • PropertyOverrideConfigurer

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值