【转】Spring bean处理——回调函数
Spring bean处理——回调函数
Spring中定义了三个可以用来对Spring bean或生成bean的BeanFactory进行处理的接口,InitializingBean、BeanPostProcessor和BeanFactoryPostProcessor。通过实现这三个接口我们就可以对Spring bean进行处理了。
InitializingBean接口
InitializingBean中定义了一个afterPropertiesSet()方法。当BeanFactory将我们的bean实例化并且设置好了对应的属性之后,如果我们的bean实现了InitializingBean接口,则会调用对应的afterPropertiesSet()方法。那么我们就可以在这个方法体里面对当前bean的属性进行更改等其它操作。
- @Component("beanA")
- public class BeanA implements InitializingBean {
- /**
- * 回调函数,会在bean属性设置完成后调用
- */
- public void afterPropertiesSet() throws Exception {
- System.out.println("回调函数,会在bean属性设置完成后调用");
- }
- }
BeanPostProcessor接口
BeanPostProcessor接口实现类可以在bean初始化前后对bean做一些处理。ApplicationContext可以自动检测到其中的bean是否已实现了BeanPostProcessor接口,如果已经实现了该接口它会自动把它当做一个BeanPostProcessor进行处理。然后在需要调用BeanPostProcessor时进行调用。BeanPostPorcessor中定义了两个方法,postProcessBeforeInitialization()和postProcessAfterInitialization()。
l postProcessBeforeInitialization(Object bean, String beanName)方法将在调用bean的初始化方法之前被调用。方法参数分别表示当前的bean对象和对应的bean名称。
l postProcessAfterInitialization(Object bean, String beanName)方法将在调用bean的初始化方法之后被调用。
BeanPostProcessor是针对于容器中的所有的bean的。一旦容器中定义有BeanPostProcessor,那么容器中的每一个bean在初始化前后都会调用BeanPostProcessor对应的方法。
- @Component
- public class MyBeanPostProcessor implements BeanPostProcessor {
- /**
- * 任何bean对象在初始化方法回调之后都会调用BeanPostProcessor的
- * postProcessAfterInitialization方法。我们可以在该方法体里面对返回的bean再做一层封装。
- * 调用该方法前,我们传递进来的bean对象是已经填充好了属性值的。当我们把BeanPostProcessor作为
- * 一个bean定义在ApplicationContext中时,ApplicationContext会自动检测到它并把它当做
- * 一个BeanPostProcessor进行调用。
- */
- public Object postProcessAfterInitialization(Object bean, String beanName)
- throws BeansException {
- System.out.println(bean + "after initialization, beanName is " + beanName);
- return bean;
- }
- /**
- * 任何bean对象在初始化方法回调之前都会调用BeanPostProcessor的
- * postProcessBeforeInitialization方法。调用该方法前,我们传递进来的
- * bean对象是已经填充好了属性值的。
- */
- public Object postProcessBeforeInitialization(Object bean, String beanName)
- throws BeansException {
- System.out.println(bean + "beforeInitialization, beanName is " + beanName);
- return bean;
- }
- }
BeanFactoryPostProcessor接口
- BeanFactoryPostProcessor接口实现类可以在当前BeanFactory初始化后,bean实例化之前对BeanFactory做一些处理。BeanFactoryPostProcessor是针对于bean容器的,在调用它时,BeanFactory只加载了bean的定义,还没有对它们进行实例化,所以我们可以通过对BeanFactory的处理来达到影响之后实例化bean的效果。跟BeanPostProcessor一样,ApplicationContext也能自动检测和调用容器中的BeanFactoryPostProcessor。
- @Component
- public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
- /**
- * BeanFactoryPostProcessor的postProcessBeanFactory()方法会在当前BeanFactory初始化
- * 以后,并且所有的bean定义都已经被加载,但是还没有对应的实例时被调用。所以我们可以在该方法体里面通过
- * BeanFactory做一些操作。当我们把BeanFactoryPostProcessor作为一个bean定义在ApplicationContext中时,
- * ApplicationContext会自动检测到它并把它当做一个BeanFactoryPostProcessor进行调用。
- */
- public void postProcessBeanFactory(
- ConfigurableListableBeanFactory beanFactory) throws BeansException {
- System.out.println("postProcessBeanFactory......");
- }
- }
【转】Spring bean处理——回调函数的更多相关文章
- 【spring 后台跳转前台】使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中
问题: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示: 问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法 ...
- spring bean初始化及销毁你必须要掌握的回调方法
spring bean在初始化和销毁的时候我们可以触发一些自定义的回调操作. 初始化的时候实现的方法 1.通过java提供的@PostConstruct注解: 2.通过实现spring提供的Initi ...
- CXF 入门:创建一个基于WS-Security标准的安全验证(CXF回调函数使用,)
http://jyao.iteye.com/blog/1346547 注意:以下客户端调用代码中获取服务端ws实例,都是通过CXF 入门: 远程接口调用方式实现 直入正题! 以下是服务端配置 ==== ...
- spring @Bean注解的使用
@Bean 的用法 @Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里.添加的bean的id为方法名 定义bean 下面是@Co ...
- Spring Boot 启动源码解析结合Spring Bean生命周期分析
转载请注明出处: 1.SpringBoot 源码执行流程图 2. 创建SpringApplication 应用,在构造函数中推断启动应用类型,并进行spring boot自动装配 public sta ...
- Spring Bean的作用域(转)
Spring Bean的作用域 .singleton [单例] eg:<bean id="personService" class="com.yinger.ser ...
- Spring bean 生命周期验证
一.从源码注释看bean生命周期 从JDK源码上看,BeanFactory实现类需要支持Bean的完整生命周期,完整的初始化方法及其标准顺序(格式:接口 方法)为: 1.BeanNameAware s ...
- Spring点滴四:Spring Bean生命周期
Spring Bean 生命周期示意图: 了解Spring的生命周期非常重要,我们可以利用Spring机制来定制Bean的实例化过程. -------------------------------- ...
- Spring点滴二:Spring Bean
Spring Bean: 被称作bean的对象是构成应用程序的支柱,是由Spring Ioc容器管理.bean是一个被实例化,配置.组装并由Spring Ioc容器管理对象. 官网API:A Spri ...
随机推荐
- zigbee学习之路(十一):看门狗
一.前言 今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来. 二.原理与分析 在CPU ...
- iOS上传文件代码,自定义组装body
以下代码为上传文件所用代码,简单方便,搞了好久,终于知道这么简单的方式来上传. 其它类库也就是把这几句代码封装的乱七八糟得,让你老久搞不懂原理.不就是在body上面加点字符串,body下面加点字符串, ...
- Thinkphp各大支付平台在线支付集成源码
用Thinkphp给客户开发网站的时候需要用到各大平台付款功能,下面就免费分享给大家,此类是个成熟类,网上down下来的,经过修改测试了(可以直接拿来使用,附带使用方法,有需要的朋友请拿走.),如果有 ...
- java编程者必收藏的十大学习网站-xiaolanglang123 -
3S博客 http://blog.3snews.net/space.php?uid=13924628&do=blog&id=70282
- 系统hosts文件的作用
host是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会 ...
- chrome的常用快捷键和命令
常见快捷键 F12 打开Chrome控制台 Ctrl+J 进入"下载内容"页面 Ctrl+H 查看"历史记录"页面 Ctrl+D 将此页加入书签 Ctrl+F ...
- LVS
1.LVS-NAT, DNAT(多目标) 2.LVS-DR(Direct Routing) 返回报文不经过Direct real server 不能跨越路由 调度算法:Scheduling 静态方法 ...
- kegg-kass注释--转载
在注释KEGG的时候,一直用到kaas,具体kaas是个什么东东,简单的总结一下吧. KEGG是由日本人搞的一个代谢图,收录基因和基因组的数据库,数据库可以分为 3大部分,基因数据库, 化学分 ...
- img的空白符
在div里面嵌套了一个img出来问题,div的高度超过了img的高度,大约3px ,查看了样式没什么问题,后来百度了一下,找到了2种的方法都有效: 第一种:img{display:block} 第二种 ...
- web.xml listener和event
Listener接口 Event类 ServletContextListener ServletContextEvent ServletContextAttributeListener Servlet ...