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实例. ...
随机推荐
- JSON初体验(二):Gson解析
今天,我们来介绍一下Gson的jar包的用法. JSON解析之Gson 特点:编码简介,谷歌官方推荐 数据之间的转换: 1.将json格式的字符串{}转换成为java对象 API: <T> ...
- Nginx一直报504超时,配置相关参数好了
相关参数:large_client_header_buffers 4 16k;client_max_body_size 30m;client_body_buffer_size 128k;proxy_c ...
- OpenCV代码提取:transpose函数的实现
OpenCV中的transpose函数实现图像转置,公式为: 目前fbc_cv库中也实现了transpose函数,支持多通道,uchar和float两种数据类型,经测试,与OpenCV3.1结果完全一 ...
- asp.net MVC+easyUI 文件上传
前言:公司前端都是index页面引用js,剩下的添加...都是html页.加大操作难度5555,所以就是主页面操作子页面上传.效果如下: 1,前端html页代码如下 .其中请注意,form中encty ...
- (原)UnrealObj篇 : 反射获取Struct类型
@Author: 白袍小道 转载请说明 案例一:蓝图传递任意Struct ,导出struct的相关属性 相关: 1.宏:DECLARE_FUNCTION: 此宏用于在自动生成的样板代码中声明t ...
- lock关键字的使用
最近在代码中,发现别人使用了lock关键字,为了理解别人写的代码,所以自己对lock关键字的使用研究了下. 微软官方解释,请百度:lock 语句(C# 参考) 微软给了个官网实例代码: class A ...
- Python创建目录文件夹
Python对文件的操作还算是方便的,只需要包含os模块进来,使用相关函数即可实现目录的创建. 主要涉及到三个函数 1.os.path.exists(path) 判断一个目录是否存在 2.os.mak ...
- kkpager的改进,Ajax数据变化但是页码不变的问题,kkpagerajax
最近做项目用到了kkpager来做分页,在一个页面只是调用一次的时候不会出现问题,但是在一个页面多次调用就出现问题了. 在网上搜集了好久,终于找到了解决方法,记录下来方便以后使用.希望也可以方便需要的 ...
- 【Autofac】- 创建的类的生命周期
1.InstancePerDependency 对每一个依赖或每一次调用创建一个新的唯一的实例.这也是默认的创建实例的方式. 官方文档解释:Configure the component so tha ...
- bcc编译
bcc编译,直接在docker里编,太方便:第一次深切体会到docker的强大: 1)下载bcc源码: 2) 把源码中的Dockerfile.ubuntu重命名为Dockerfile 3)sudo d ...