bean的生命周期

在配置bean的时候指定 bean的初始化方法和析构函数。

下面的例子展示了从Ioc容器创建到创建bean实例到Ioc容器销毁的过程。

配置文件如下:

  <bean id="flowerBean2" class="com.pfSoft.spel.Flower" init-method="testInitFun" destroy-method="testDestory"><property name="flowerName" value="rose"></property><property name="color" value="red"></property><property name="price" value="20"></property></bean>

将原实体类改写,在构造函数、属性赋值、中增加out输出,方便查看先后顺序,并新增init和destory方法:

public class Flower {private String flowerName;private Double price;/*** * @return the flowerName*/public String getFlowerName() {return flowerName;}/*** @param flowerName the flowerName to set*/public void setFlowerName(String flowerName) {System.out.println("这里执行属性的set方法,setFlowName");this.flowerName = flowerName;}private String color;/*** * @return the color*/public String getColor() {return color;}/*** @param color the color to set*/public void setColor(String color) {System.out.println("这里执行属性的set方法,setcolor");this.color = color;}/*** * @return the price*/public Double getPrice() {return price;}/*** @param price the price to set*/public void setPrice(Double price) {this.price = price;}/* (non-Javadoc)* @see java.lang.Object#toString()*/@Overridepublic String toString() {return "Flower [flowerName=" + flowerName + ", price=" + price+ ", color=" + color + "]";}private Flower(){System.out.println("这里执行构造函数");}private void testInitFun() {System.out.println("这里执行初始化方法");}private void testDestory() {System.out.println("这里执行destory方法");}}

测试代码如下:

ApplicationContext applicationContext;@Beforepublic void init() {applicationContext = new ClassPathXmlApplicationContext("spring-SpEL.xml");}@Testpublic void testFlower() {Flower flower = (Flower) applicationContext.getBean("flowerBean2");System.out.println(flower);}@Afterpublic void after() {ClassPathXmlApplicationContext context = (ClassPathXmlApplicationContext) applicationContext;context.close();}

输出结果为:

这里执行构造函数
这里执行属性的set方法,setFlowName
这里执行属性的set方法,setcolor
这里执行初始化方法
Flower [flowerName=rose, price=20.0, color=red]
四月 26, 2016 10:19:33 下午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@1637f22: startup date [Tue Apr 26 22:19:33 CST 2016]; root of context hierarchy
这里执行destory方法

由此可见执行先后顺序为   bean的构造函数——》set方法——》配置bean时指定的init-method方法——》销毁时,bean中配置指定的destroy-method方法

创建bean后置处理器

需要实现BeanPostProcessor接口,并且这个处理器是针对所有bean的。

配置文件如下:

   <bean id="flowerBean" class="com.pfSoft.spel.Flower" init-method="testInitFun" destroy-method="testDestory"><property name="flowerName" value="rose"></property><property name="color" value="red"></property><property name="price" value="20"></property></bean><bean class="com.pfSoft.spel.MyBeanProcess"></bean>

Processor代码如下,在这里可以对实例化bean之前进行修改,返回的bean将是这里修改后的:

public Object postProcessBeforeInitialization(Object bean, String beanName)throws BeansException {return bean;}public Object postProcessAfterInitialization(Object bean, String beanName)throws BeansException {System.out.println("执行BeforeInitialization");System.out.println(MessageFormat.format("修改前的bean为:{0}", bean));if("flowerBean".equals(beanName)){System.out.println("开始修改值");Flower flower= (Flower) bean;flower.setColor("白色");}System.out.println(MessageFormat.format("修改后的bean为:{0}", bean));return bean;}

测试代码如下:

@Beforepublic void init() {applicationContext = new ClassPathXmlApplicationContext("spring-SpEL.xml");}@Testpublic void testFlower() {com.pfSoft.spel.Flower flower = (Flower) applicationContext.getBean("flowerBean");System.out.println(MessageFormat.format("测试输出flower:{0}", flower) );}@Afterpublic void after() {ClassPathXmlApplicationContext context = (ClassPathXmlApplicationContext) applicationContext;context.close();}

测试输出如下:

这里执行构造函数
这里执行属性的set方法,setFlowName
这里执行属性的set方法,setcolor
这里执行初始化方法
执行BeforeInitialization
修改前的bean为:Flower [flowerName=rose, price=20.0, color=red]
开始修改值
这里执行属性的set方法,setcolor
修改后的bean为:Flower [flowerName=rose, price=20.0, color=白色]
测试输出flower:Flower [flowerName=rose, price=20.0, color=白色]
四月 28, 2016 4:35:35 下午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@1637f22: startup date [Thu Apr 28 16:35:34 CST 2016]; root of context hierarchy
这里执行destory方法

由上可以看出bean的生命周期,执行过程。

转载于:https://www.cnblogs.com/falcon-fei/p/5437170.html

spring框架学习笔记(八)相关推荐

  1. Spring框架学习笔记,超详细!!(4)

    Java小白开始学习Spring框架,一方面,跟着视频学习,并记录下学习笔记,方便以后复习回顾.另一方面,发布学习笔记来约束自己,学习路程还很遥远,继续加油坚持!!!希望能帮助到大家! 另外还有我的牛 ...

  2. Spring框架学习笔记(三)(AOP,事务管理)

    Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...

  3. Spring框架学习笔记---完结

    一.简介 Spring:春天----->给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架. 2004年3月24日,Spring框架 ...

  4. Spring框架学习笔记(1) ---[spring框架概念 , 初步上手使用Spring , 控制反转 依赖注入初步理解 ]

    spring官网 -->spring官网 spring5.3.12–>spring-framework 在线文档 --> Spring 5.3.12 文章目录 1.Spring概论 ...

  5. Spring框架学习笔记01:初探Spring——采用Spring配置文件管理Bean

    文章目录 一.Spring概述 二.入门案例演示 (一)创建Maven项目[SpringDemo2021] (二)在pom.xml文件里添加依赖 场景:勇敢的骑士去完成杀龙的任务. (三)创建杀龙任务 ...

  6. spring框架学习笔记(一)

    仅为个人笔记,方便自己日后查看. eclipse安装spring插件的方法: http://jingyan.baidu.com/article/1612d5005fd087e20f1eee10.htm ...

  7. spring框架学习笔记2:配置详解

    简单写一个类做示例: package bean;public class User {private String name;private Integer age;public String get ...

  8. Spring框架学习笔记(7)——代理对象实现AOP

    AOP(面向切面编程) AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming ...

  9. Spring框架学习笔记09:基于XML配置方式搭建SSM框架实现用户登录

    文章目录 一.采用MVC架构 二.用户登录运行效果 三.基于XML配置方式搭建SSM框架实现用户登录 (一)创建数据库与表 - simonshop (t_user) 1.创建数据库 - simonsh ...

最新文章

  1. F5第一个10000台
  2. 世界未解之谜之----------Android Gradle
  3. ftp服务用户访问权限设置
  4. Jmater添加UDP插件
  5. python yield使用
  6. 五分钟带你摸透 Vue组件及组件通讯
  7. git版本库--常用命令
  8. C语言学习笔记---动态内存分配
  9. [Oracle]行列转换(行合并与拆分)
  10. ios去掉字符串中的某个字符_iOS如何过滤掉文本中特殊字符
  11. 关于OCR身份证识别
  12. Google kickstart 2013 Practice Round Captain Hammer 题解
  13. raptor的基本符号有_Raptor运算符号、函数、子过程介绍大全
  14. Android中的短信收不到问题,手机收不到短信怎么回事?怎么恢复
  15. 二进制的应用——枚举子集
  16. html5开发android应用
  17. 【视频笔记】微信小程序
  18. 计算机组成与系统结构2018,计算机组成原理与系统结构2018-2019试卷a.doc
  19. 5G发展面临窘境,5G手机销量环比下滑,手机企业对5G热情降温
  20. 一个好的学习方法——MAS 学习法

热门文章

  1. [PY3]——内置数据结构(4)——字符串格式化(format)
  2. 关于android 图像格式问题
  3. Java数字图像处理基础知识 - 必读
  4. 使用SPEncode.HtmlEncodePreserverSpace保存输入
  5. kylin与superset整合
  6. PHP接入支付宝手机网站支付、移动支付接口
  7. poj3342Party at Hali-Bula(树形dp)
  8. 性能调优:理解Set Statistics IO输出
  9. PHP内核的学习--PHP生命周期
  10. Java多线程中run和start的区别