文档章节

spring --(12)bean的生命周期

求是科技
 求是科技
发布于 2016/08/28 11:54
字数 407
阅读 6
收藏 1

springIOC容器可以管理bean的生命周期,管理过程:
1>通过构造器或工厂方法创建bean实例
2>给bean的属性设值
2.5>将bean的实例传送给bean的前置处理器,调用postProcessAfterInitialization(Object arg0, String arg1)方法。
3>调用bean的初始化方法
3.5>将bean的实例传送给bean的后置处理器,调用postProcessAfterInitialization(Object arg0, String arg1)方法。
4>此时,bean可以使用了
5>关闭容器,调用bean的销毁方法
xml配置如下

	<bean id="car" class="com.test.autowired.Car" init-method="init" destroy-method="destroy">
		<property name="brand" value="Audi"></property>
	</bean>

main方法如下

	public static void main(String[] args) throws SQLException {
		
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		Car car = (Car) ctx.getBean("car");
		System.out.println(car);
		
		ctx.close();
		
	}

spring中bean的处理器允许在调用bean的初始化方法之前/之后对bean进行一些额外的处理。bean的处理器会对IOC容器中所有的bean进行扫描,需要在IOC中配置bean的处理器。
xml文件配置如下

	<bean id="car" class="com.test.autowired.Car" init-method="init" destroy-method="destroy">
		<property name="brand" value="Audi"></property>
	</bean>
	
	<bean class="com.test.autowired.MyBean"></bean>

MyBean配置如下

package com.test.autowired;

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

public class MyBean implements BeanPostProcessor {

	@Override
	public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException {
		// TODO Auto-generated method stub
		
		//在这里修改返回对象的属性值
		Car car = new Car();
		car.setBrand("Ford");
		System.out.println("AfterInitialization:"+arg0+","+arg1);
		return car;
	}

	@Override
	public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException {
		// TODO Auto-generated method stub
		//IOC容器会扫描所有的bean
		//这里可以过滤一些bean
		if ("car".equals(arg1)) {
			System.out.println("过滤car");
		}
		System.out.println("BeforeInitialization:"+arg0+","+arg1);
		return arg0;
	}

}


main方法如上,输出信息如下

car's constructor
setBrand
过滤car
BeforeInitialization:Car [brand=Audi],car
init ...
car's constructor
setBrand
AfterInitialization:Car [brand=Audi],car
Car [brand=Ford]
destroy ...

© 著作权归作者所有

求是科技

求是科技

粉丝 100
博文 455
码字总数 238818
作品 0
成都
后端工程师
私信 提问
Spring高频面试题,你能答的上哪些?(高级篇)

1、什么是 Spring 框架?Spring 框架有哪些主要模块? 2、使用 Spring 框架能带来哪些好处? 3、什么是控制反转(IOC)?什么是依赖注入? 4、请解释下 Spring 框架中的 IoC? 5、BeanFactory...

Java架构
07/25
0
0
Spring Bean的生命周期

1.当调用者通过getBean(beanName)向容器请求某一个Bean时,如果容器注册了org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor接口,在实例化Bean之前,将调用接...

我吃草莓
2014/04/10
224
0
Spring Bean的生命周期,《Spring 实战》书中的官方说法

连着两天的面试 ,都问到了 Spring 的Bean的生命周期,其中还包括 昨晚一波阿里的电话面试。这里找到了Spring 实战中的官方说法。希望各位要面试的小伙伴记住,以后有可能,或者是有时间 去看...

致未来的自己
2018/08/02
0
0
Spring Bean生命周期-阶段汇总,面试必备(十二)

以后面试问到Bean的生命周期再也不怕了! 看了这么久的Spring源码,想必对Spring的生命周期已经有了一定的了解,这次将之前零散的生命周期处理的事情贯穿起来,看过之后,一定对bean的生命周...

Real_man
2018/10/18
0
0
Spring Ioc 源码分析(二)- bean的实例化

在 Spring Ioc 源码分析(一)- XML 解析 中,我们完成了从 xml 到 BeanDefinition的过程。只是把 xml描述的 Bean定义转换为 Java对象描述。本文将讲解 spring 如何利用 BeanDefinition 完成...

我叫董先森
2017/10/19
20
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件55-手机通讯录

一、前言 前面几篇文章中的控件基本上难度系数接近0,甚至有凑控件数量的嫌疑,这次必须来一个强悍的控件,本控件难度系数在所有控件中排前五,代码量也不少,头文件都550行,实现文件1600行...

飞扬青云
31分钟前
26
0
C++与QML交互2:在QML中调用C++特性

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/xi_gua_gua/article/details/56991367 QML引擎(QQmlEngin...

shzwork
48分钟前
3
0
【Go专家编程】defer这里有个坑

前言 项目中,有时为了让程序更健壮,也即不panic,我们或许会使用recover()来接收异常并处理。 比如以下代码: func NoPanic() {if err := recover(); err != nil {fmt.Println("Recov...

恋恋美食
57分钟前
4
0
20190920笔记

扩展: bashrc和bash_profile http://ask.apelearn.com/question/7719 http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html echo 颜色 http://www.cnblogs.com/lr-ting/archi......

徐-锐
今天
3
0
Shiro整合Redis代码解读

1. shiro默认使用的MemoryConstrainedCacheManager创建MapCache来保存缓存数据。manager和cache对象之间的关系可以参考笔者的另一篇文章,Springboot Redis详解。 2. shiro整合Redis的关键就...

sunranhou
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部