Spring学习-- IOC 容器中 bean 的生命周期
Spring IOC 容器可以管理 bean 的生命周期 , Spring 允许在 bean 声明周期的特定点执行定制的任务。
Spring IOC 容器对 bean 的生命周期进行管理的过程:
- 通过构造器或者工厂方法创建 bean 实例。
- 为 bean 的属性赋值和对其他 bean 的引用。
- 调用 bean 的初始化方法。
- bean 初始成功,可以使用。
- 容器关闭时 , 调用 bean 的销毁方法。
在 bean 的声明里设置 init-method 和 destroy-method 属性 , 为 bean 指定初始化和销毁方法。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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.xsd"> <bean id="initBean" class="com.itdjx.spring.beans.init.InitBean" init-method="init" destroy-method="destroy">
<property name="name" value="操蛋儿"/>
<property name="info" value="my name is ET"/>
</bean> </beans>
package com.itdjx.spring.beans.init; /**
* @author Wáng Chéng Dá
* @create 2017-03-02 16:07
*/
public class InitBean { private String name; private String info; public InitBean() {
System.out.println("I am InitBean's Constructor...");
} public void init() {
System.out.println("I am InitBean's init method...");
} public void destroy() {
System.out.println("I am InitBean's destroy method...");
} public String getName() {
return name;
} public void setName(String name) {
System.out.println("I am InitBean's setName method...");
this.name = name;
} public String getInfo() {
return info;
} public void setInfo(String info) {
System.out.println("I am InitBean's serInfo method...");
this.info = info;
} @Override
public String toString() {
return "InitBean{" +
"name='" + name + '\'' +
", info='" + info + '\'' +
'}';
}
}
package com.itdjx.spring.beans.init; import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* @author Wáng Chéng Dá
* @create 2017-03-02 16:16
*/
public class Main { public static void main(String[] args) { ClassPathXmlApplicationContext cxt = new ClassPathXmlApplicationContext("beans-init.xml");
InitBean initBean = (InitBean) cxt.getBean("initBean");
System.out.println(initBean);
cxt.close(); }
}
控制台输出:
|
I am InitBean's Constructor... |
bean 后置处理器:
- bean 后置处理器允许在调用初始方法前后对 bean 进行额外的处理。
- bean 后置处理器对 IOC 容器里的所有 bean 实例逐一处理 , 而非单一实例。
- bean 后置处理器需要实现 BeanPostProcessor Interface , 在初始化方法被调用前后 , Spring 将把每个 bean 实例分别传送给上述接口的两个方法。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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.xsd"> <bean id="initBean" class="com.itdjx.spring.beans.init.InitBean" init-method="init" destroy-method="destroy">
<property name="name" value="操蛋儿"/>
<property name="info" value="my name is ET"/>
</bean> <bean class="com.itdjx.spring.beans.init.MyBeanPostProcessor"/> </beans>
package com.itdjx.spring.beans.init; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor; /**
* 我的 bean 后置处理器
*
* @author Wáng Chéng Dá
* @create 2017-03-02 16:25
*/
public class MyBeanPostProcessor implements BeanPostProcessor { @Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("I am MyBeanPostProcessor's before method...bean: " + bean + " beanName: " + beanName);
return bean;
} @Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("I am MyBeanPostProcessor's after method...bean: " + bean + " beanName: " + beanName);
return bean;
}
}
控制台输出:
|
I am InitBean's Constructor... |
bean:实例本身。
beanName:IOC 容器配置的 bean 的名字
返回值:是实际上返给用户的那个 bean 实例 , 注意:可以在上述两个方法中修改 bean 的属性 , 甚至返回一个新的 bean 实例。
添加 bean 后置处理器的 bean 的生命周期:
- 通过构造器或工厂方法创建 bean 实例。
- 为 bean 的属性赋值和对其他 bean 的引用。
- 将 bean 实例传递给 bean 后置处理器的 postProcessBeforeInitialization 方法。
- 调用 bean 的初始化方法。
- 将 bean 实例传递非 bean 后置处理器的 postProcessAfterInitialization 方法。
- bean 初始化成功 , 可以使用。
- 容器关闭时 , 调用 bean 的销毁方法。
package com.itdjx.spring.beans.init; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor; /**
* 我的 bean 后置处理器
*
* @author Wáng Chéng Dá
* @create 2017-03-02 16:25
*/
public class MyBeanPostProcessor implements BeanPostProcessor { @Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("I am MyBeanPostProcessor's before method...bean: " + bean + " beanName: " + beanName);
InitBean initBean = new InitBean();
initBean.setName("狗剩儿");
initBean.setInfo("I am the revised infomation...");
return initBean;
} @Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("I am MyBeanPostProcessor's after method...bean: " + bean + " beanName: " + beanName);
return bean;
}
}
控制台输出:
|
I am InitBean's Constructor... |
Spring学习-- IOC 容器中 bean 的生命周期的更多相关文章
- Spring重点—— IOC 容器中 Bean 的生命周期
一.理解 Bean 的生命周期,对学习 Spring 的整个运行流程有极大的帮助. 二.在 IOC 容器中,Bean 的生命周期由 Spring IOC 容器进行管理. 三.在没有添加后置处理器的情况 ...
- Spring(十二):IOC容器中Bean的生命周期方法
IOC容器中Bean的生命周期方法 1)Spring IOC容器可以管理Bean的声明周期,Spring允许在Bean生命周期的特定点执行定制的任务. 2)Spring IOC容器对Bean的生命周期 ...
- spring IOC 容器中 Bean 的生命周期
IOC 容器中 Bean 的生命周期: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.调用 Bean 后置处理器接口(BeanPostPr ...
- Spring IOC容器中Bean的生命周期
1.IOC容器中Bean的生命周期 构造器函数 设置属性 初始化函数(在Bean配置中 init-method) 使用Bean 结束时关闭容器(在Bean中配置destroy-method) 2.Be ...
- IOC容器中bean的生命周期
一.Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进行管理的过程如下: (1).通 ...
- [原创]java WEB学习笔记101:Spring学习---Spring Bean配置:IOC容器中bean的声明周期,Bean 后置处理器
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring容器中bean的生命周期以及关注spring bean对象的后置处理器:BeanPostProcessor(一个接口)
Spring IOC 容器对 Bean 的生命周期进行管理的过程: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.将 Bean 实例传递给 ...
- Spring4学习回顾之路06- IOC容器中Bean的生命周期方法
SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行特定的任务! Spring IOC容器对Bean的生命周期进行管理的过程: -通过构造器或者工厂方法创建 ...
- 7 -- Spring的基本用法 -- 9...容器中Bean的生命周期
7.9 容器中Bean的生命周期 Spring可以管理singleton作用域的Bean的生命周期,Spring可以精确地知道该Bean何时被创建,何时被初始化完成.容器何时准备销毁该Bean实例. ...
随机推荐
- 【Java】关于Spring框架的总结 (二)
上文提到了 Spring 的 IoC 特性和 AOP 特性,只提到个别的实现方法.本文将对 IoC 和 AOP 其他方法进行讲解. 多种方式实现依赖注入 1.设值注入 上文中使用的注入方法:通过 se ...
- AHOI2018 (暨HNOI2018)编外滚粗记
Day0: 向老师打了声报告就偷偷摸摸溜出了学校……感谢门卫师傅没把我当贼抓起来 车上背了一遍FFT,SAM的板子.嘴巴ac了两道CC水题.离线刷了一波知乎. 酒店好评. Day1: 不知不觉就开考了 ...
- ABAP CDS ON HANA-(12)ODATA Service
Create a CDS view and we have the view type as ‘BASIC’ view To publish this as oData, add the annota ...
- 10-mongodb启动错误
1.error信息 python@ubuntu:~$ mongod --22T17:: I CONTROL [initandlisten] MongoDB starting : pid= port= ...
- hive报错:Caused by: ERROR XBM0H: Directory /var/lib/hive/metastore/metastore_db cannot be created.
在cdh集群中,删除之前的hive服务,然后将hive添加到其他节点,然后再通过hive客户端连接hive报错: Caused by: ERROR XJ041: Failed to create da ...
- 『JavaScript』核心
弱类型语言 JavaScript是一种弱类型的语言.变量可以根据所赋的值改变类型.原始类型之间也可以进行类型转换.其弱类型的物质为其带来了极大的灵活性. 注意:原始类型使用值传递,复合类型使用引用传递 ...
- Percona-Tookit工具包之pt-find
Preface We used to use "find" command in linux or AIX when we need to get a certai ...
- 「暑期训练」「Brute Force」 Restoring Painting (CFR353D2B)
题意 给定一定条件,问符合的矩阵有几种. 分析 见了鬼了,这破题谁加的brute force的标签,素质极差.因为范围是1e5,那你平方(枚举算法)的复杂度必然爆. 然后你就会思考其中奥妙无穷的数学规 ...
- 接口自动化测试框架Karate入门
介绍 在这篇文章中,我们将介绍一下开源的Web-API自动化测试框架--Karate Karate是基于另一个BDD测试框架Cucumber来建立的,并且共用了一些相同的思想.其中之一就是使用Gher ...
- jmeter实例,如果有说明错误,请各位大神批评
首先我们打开jmeter,今天录制的脚本的是获取QQ头像,找了好久才找到可以免费试用的接口,如果有什么错误的地方,欢迎大家提出来,我会及时修改,也给自己一次进步的机会,希望大家不吝赐教!!!如果有什么 ...