Bean的生命周期方法

src\dayday\Car.java

package dayday;

import com.sun.org.apache.xpath.internal.SourceTree;

import javax.sound.midi.Soundbank;

/**
* Created by I am master on 2016/11/28.
*/
public class Car {
private String name;
public void setName(String name){
this.name=name;
System.out.println("setName...");
}
public String getName(){
return name;
}
public String toString(){
return "["+"carname="+name+"]";
}
public Car(){
System.out.println("Car's constructor...");
}
public void init(){
System.out.println("init...");
}
public void destroy(){
System.out.println("destroy...");
}
}

src\dayday\Main.java

package dayday;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import java.net.SocketTimeoutException;
import java.sql.SQLException; /**
* Created by I am master on 2016/11/28.
*/
public class Main {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
Car car=ctx.getBean("car",Car.class);
System.out.println(car);
//用close()方法是就会调用bean对应的destroy()方法
ctx.close();
}
}

src\beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="car" class="dayday.Car" init-method="init" destroy-method="destroy">
<property name="name" value="Audi"/>
</bean>
</beans> 运行结果

Car's constructor...
setName...
init...

[carname=Audi]
destroy...

bean的生命周期进行管理的过程分为五步

1)通过构造方法或工厂方法创建bean实例

2)为bean的属性设置值和对其他bean的引用

3)调用bean的初始化方法

4)使用bean

5)当spring容器关闭时,调用bean的销毁方法

bean后置处理器

在调用初始化工作前后对bean进行额外的操作

需要实现BeanPostProcessor接口

postProcessBeforeInitialization(Object bean, String beanName)在调用init()方法之前调用

postProcessAfterInitialization(Object bean, String beanName)在调用init()方法之后调用

src\dayday\MyBeanPostProcessor.java

package dayday;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor; /**
* Created by I am master on 2016/11/29.
*/
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization "+bean+" "+beanName);
return bean;
} @Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization "+bean+" "+beanName);
return bean;
}
}

Main/Car.java代码不发生变化

src\bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="car" class="dayday.Car" init-method="init" destroy-method="destroy">
<property name="name" value="Audi"/>
</bean>
<!--配置bean的后置处理器-->
<bean class="dayday.MyBeanPostProcessor"></bean>
</beans>
运行结果:
Car's constructor...
setName...
postProcessBeforeInitialization [carname=Audi] car
init...
postProcessAfterInitialization [carname=Audi] car
[carname=Audi]
destroy...
//调用close()方式是就会调用bean中的destroy()方法

最新文章

  1. Java初学(三)
  2. volley(3) 参数{or_barcode:or_barcode,or_remai:or_remain, bar_remain:bar_remain} method:POST
  3. java学习笔记3
  4. windows 远程桌面连接ubuntu xrdp 只看到墙纸其他什么都没有
  5. WCF学习心得--客户端获取服务端自定义类数据
  6. centos 安装 mongo3.0
  7. mysql不能链接远程,报(Host &#39;***.***.***.***&#39; is not allowed to connect to this MySQL server)
  8. 《Effective C++ 》学习笔记——条款03
  9. faster-rcnn中ROI_POOIING层的解读
  10. 如何更改 iOS 和安卓浏览器上的 input[type=&quot;radio&quot;] 元素的默认样式?
  11. C# datatable 重新排序
  12. tangent space与object space
  13. MongoDB 用法入门(windows)①
  14. javaScript 节流与防抖
  15. Linux下的压缩解压缩命令详解及实例
  16. DataGridView如何绑定DataRow对象集合
  17. java struts2入门学习---异常处理和类型转换
  18. Java把数字格式化为货币字符串
  19. MFC 刷新函数:Invaldate,UpdateWindow,InvaldateRect
  20. CodeSmith无法获取Oracle表注释

热门文章

  1. CI 3.0.6 控制器打印base_url 地址不为 localhost的解决方法
  2. R语言实战(二)数据管理
  3. select下拉框插件(转)
  4. 几款极好的 JavaScript 文件上传插件
  5. 张艾迪(创始人):Be.Time+Cr.Idear的创新理念
  6. C#如果把A.new()编译成new A()
  7. 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)
  8. occ添加新的捕捉模式
  9. Redis常用命令入门5:有序集合类型
  10. 转: Redis基础总结