Spring BeanPostProcessor(后处理器)的简单使用

Spring创建bean是根据配置来的,你可以通过xml文件配置,也可以通过java 的方式来配置,Spring在IOC容器完成bean的实例化、配置和初始化后可以通过BeanPostProcessor(后处理器)对创建的bean进行各种处理。你可以在这里修改bean的属性或者增强bean,spring AOP创建jdk代理或者cglib代理的过程就是在BeanPostProcessor(后处理器)中实现的。因此我将Spring AOP 技术看做是:Spring AOP = BeanPostProcessor + 代理。

BeanPostProcessor的作用域范围是容器级的。它只和你所使用的容器有关。如果你在容器中定义一个实现了BeanPostProcessor的类,它仅仅对此容器中的bean进行后置处理。

如果配置了多个BeanPostProcessor,那么可以通过实现Ordered接口设置'order'属性来控制BeanPostProcessor的执行次序。


下面我们来实现一个很简单的例子。我会在一个Controller中注入一个singleton 作用域的User bean实例,我会在xml中配置好user的name属性为“”zsq“”,然后我会通过后处理器将user的name属性更改为“”zhaosongqiang“”。

1 首先创建一个User类

public class User {
	
	private String name;
	
	private String password;

	private int age;
//省略setter 和 getter	
}

2 在springContext.xml文件中将User注册为一个bean并设置相应的属性。

<bean id="user" class="com.zsq.cn.login.entity.User">
		<property name="name" value="zsq" />
		<property name="age" value="22" />
		<property name="password" value="001" />
	</bean>

3 新建一个后处理器 其实现两个接口 一个是BeanPostProcessor一个是Ordered,并通过@Component注解将该类注入容器

@Component
public class TestBeanPostProcessor implements BeanPostProcessor,Ordered{

	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		return bean;
	}

	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		if(bean instanceof User){
			User user = (User) bean;
			user.setName("zhaosongqiang");
		}
		return bean;
	}

	@Override
	public int getOrder() {
		return 0;
	}
}

4 新建一个controller 来依赖获取user bean的实例

@Controller
public  class LoginController extends BaseException{
	
	@Autowired
	private User user;
	
	@RequestMapping("/")
	public String home(Model model){
		
		System.out.println(user.toString());
		
		return "home/index";
	}
}
控制台的输出结果为:[name=zhaosongqiang,password=001,age=22]

 可以看到在后处理器里已经改变了bean.














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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值