Spring的发布处理器(BeanPostProcessor)
来源:互联网 发布:数据分析需要的技能 编辑:程序博客网 时间:2024/05/29 16:11
BeanFactoryPostProcessor和BeanPostProcessor都是spring初始化bean的扩展点,两个接口非常相似。
一、BeanFactoryPostProcessor可以对bean的定义(配置元数据)进行处理。也就是说,Spring IoC容器允许BeanFactoryPostProcessor在容器实际实例化任何其它的bean之前读取配置元数据,并有可能修改它。通过beanFactory可以获取bean的示例或定义等,同时可以修改bean的属性,这是和BeanPostProcessor最大的区别。
BeanDefinition bd = beanFactory.getBeanDefinition("xxBean"); MutablePropertyValues mpv = bd.getPropertyValues(); if(pv.contains("xxName")) { pv.addPropertyValue("xxName", "icoder"); }如果你愿意,你可以配置多个BeanFactoryPostProcessor。通过设置'order'属性来控制BeanFactoryPostProcessor的执行次序。
注册BeanFactoryPostProcessor的实例,需要重写void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException方法;
二、注册BeanPostProcessor的实例,需要重载
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException方法;
和
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException方法;
示例:
bean:
package com.yourcompany.spring;public class HelloBean{ private String message; public void setMessage(String message){ this.message = message; } public void getMessage(){ System.out.println("Your Message : " + message); } public void init(){ System.out.println("Bean is going through init."); }}
processor:
package com.yourcompany.spring;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;public class Processor implements BeanPostProcessor{public Object postProcessAfterInitialization(Object arg0, String arg1)throws BeansException {System.out.println("After Initialization : " + arg0);return arg0;}public Object postProcessBeforeInitialization(Object arg0, String arg1)throws BeansException {System.out.println("Before Initialization : " + arg0);return arg0;}}
applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="processor" class="com.yourcompany.spring.Processor"></bean> <bean id="helloBean" class="com.yourcompany.spring.HelloBean" init-method="init"> <property name="message" value="Hello,World!"/> </bean></beans>
程序主入口:
package com.yourcompany.spring;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Hello{ public static void main(String[] args) {ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");HelloBean hello=(HelloBean)context.getBean("helloBean");hello.getMessage();}}<span style="font-size:18px;"></span>
三、还有一点区别就是BeanFactoryPostProcessor的回调比BeanPostProcessor要早。
参考:http://blog.csdn.net/mn11201117/article/details/24986325
- Spring的发布处理器(BeanPostProcessor)
- Spring的后置处理器(BeanFactoryPostProcessor和BeanPostProcessor)
- Spring BeanPostProcessor(后处理器)的简单使用
- Spring - BeanPostProcessor接口(后处理器)讲解
- 关于Spring的Aware接口和后置处理器接口(BeanPostProcessor和BeanFactoryPostProcessor)的一些想法
- spring 后置处理器BeanFactoryPostProcessor和BeanPostProcessor的用法和区别
- spring 后置处理器BeanFactoryPostProcessor和BeanPostProcessor的用法和区别
- spring 后置处理器BeanFactoryPostProcessor和BeanPostProcessor的用法和区别
- spring 后置处理器BeanFactoryPostProcessor和BeanPostProcessor的用法和区别
- spring 后置处理器BeanFactoryPostProcessor和BeanPostProcessor的用法和区别
- spring 后置处理器BeanFactoryPostProcessor和BeanPostProcessor的用法和区别
- spring 后置处理器BeanFactoryPostProcessor和BeanPostProcessor的用法和区别
- Spring中的后置处理器BeanPostProcessor讲解
- Spring 的 BeanPostProcessor
- 【Spring学习23】容器扩展点:后置处理器BeanPostProcessor
- Spring 的 BeanPostProcessor接口实现
- Spring 的 BeanPostProcessor接口实现
- Spring 的 BeanPostProcessor接口实现
- SEO优化
- Irrlicht学习笔记(10)--PerPixelLighting
- Alyona and Mex
- linux xfs和ext4的区别
- TabLayout学习
- Spring的发布处理器(BeanPostProcessor)
- DELPHI获取网卡MAC地址
- E - 排序 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
- 【MyBatis框架】mapper配置文件-关于动态sql
- 卷积神经网络
- UVA-123
- BZOJ 1093: [ZJOI2007]最大半连通子图
- 2014.7.27 ~ 2016.7.10 回顾
- 一起talk C栗子吧(第一百七十五回:C语言实例--获取当前终端的行数和列数)