spring容器bean实例化之后添加一些自己的逻辑处理(应用实例启动tomcat加载缓存)
来源:互联网 发布:装修甲醛来自哪里 知乎 编辑:程序博客网 时间:2024/06/01 18:59
今天学习了一下spring的BeanPostProcessor接口,该接口作用是:如果我们需要在Spring容器完成Bean的实例化,配置和其他的初始化后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现。
下面我们来看一个简单的例子:
package com.spring.test.di;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class BeanPostPrcessorImpl implements BeanPostProcessor {
// Bean 实例化之前进行的处理
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("对象" + beanName + "开始实例化");
return bean;
}
// Bean 实例化之后进行的处理
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("对象" + beanName + "实例化完成");
return bean;
}
}
只要将这个BeanPostProcessor接口的实现定义到容器中就可以了,如下所示:
<bean class="com.spring.test.di.BeanPostPrcessorImpl"/>
测试代码如下:
package com.spring.test.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class TestMain {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// 得到ApplicationContext对象
ApplicationContext ctx = new FileSystemXmlApplicationContext(
"applicationContext.xml");
// 得到Bean
ctx.getBean("logic");
}
}
运行以上测试程序,可以看到控制台打印结果:
对象logic开始实例化
对象logic实例化完成
BeanPostProcessor的作用域是容器级的,它只和所在容器有关。如果你在容器中定义了BeanPostProcessor,它仅仅对此容器中的bean进行后置。它不会对定义在另一个容器中的bean进行任何处理。
注意的一点:
BeanFactory
和ApplicationContext
对待bean后置处理器稍有不同。ApplicationContext
会自动检测在配置文件中实现了BeanPostProcessor
接口的所有bean,并把它们注册为后置处理器,然后在容器创建bean的适当时候调用它。部署一个后置处理器同部署其他的bean并没有什么区别。而使用BeanFactory
实现的时候,bean 后置处理器必须通过下面类似的代码显式地去注册:
BeanPostPrcessorImpl beanPostProcessor = new BeanPostPrcessorImpl();
Resource resource = new FileSystemResource("applicationContext.xml");
ConfigurableBeanFactory factory = new XmlBeanFactory(resource);
factory.addBeanPostProcessor(beanPostProcessor);
factory.getBean("logic");
转载地址:http://blog.csdn.net/chensugang/article/details/3423650
- spring容器bean实例化之后添加一些自己的逻辑处理(应用实例启动tomcat加载缓存)
- Spring容器中Bean的实例化
- 实例化Spring容器,实例化bean
- Spring容器实例化、bean的实例化
- tomcat加载spring过程以及实例化bean
- spring IOC容器实例化Bean的方式与RequestContextListener应用
- spring IOC容器实例化Bean的方式与RequestContextListener应用
- spring IOC容器实例化Bean的方式与RequestContextListener应用
- spring IOC容器实例化Bean的方式与RequestContextListener应用
- spring IOC容器实例化Bean的方式与RequestContextListener应用
- Spring容器Bean的实例化方式和声明周期
- Spring IoC容器实例化bean的三种方式
- Spring-- Ioc 容器Bean实例化的几种场景
- Spring IOC容器中Bean的实例化过程
- spring容器的bean什么时候被实例化
- Spring系列--bean容器的实例化之构造器创建bean实例(采用dtd约束)
- (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
- Spring (一) 加载配置文件,实例化类, 三种实例化bean的方式
- “#if 0/#if 1 ... #endif”的作用
- 输出乘法口诀表
- javax.servlet.FilterRegistration找不到该类错误
- 虚拟机异常处理
- 架构、框架和设计模式关系
- spring容器bean实例化之后添加一些自己的逻辑处理(应用实例启动tomcat加载缓存)
- UIView的transform属性
- 崩溃日志解析命令:(处理崩溃)
- scanf(),getchar(),gets()区别与用法
- PAT 1021. Deepest Root
- Linux系统各目录和文件系统
- android事件分发机制分析
- android蓝牙
- tab栏切换(二)