Spring中Bean的生命周期方法
2024-10-13 21:10:38
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()方法
最新文章
- Java初学(三)
- volley(3) 参数{or_barcode:or_barcode,or_remai:or_remain, bar_remain:bar_remain} method:POST
- java学习笔记3
- windows 远程桌面连接ubuntu xrdp 只看到墙纸其他什么都没有
- WCF学习心得--客户端获取服务端自定义类数据
- centos 安装 mongo3.0
- mysql不能链接远程,报(Host &#39;***.***.***.***&#39; is not allowed to connect to this MySQL server)
- 《Effective C++ 》学习笔记——条款03
- faster-rcnn中ROI_POOIING层的解读
- 如何更改 iOS 和安卓浏览器上的 input[type=";radio";] 元素的默认样式?
- C# datatable 重新排序
- tangent space与object space
- MongoDB 用法入门(windows)①
- javaScript 节流与防抖
- Linux下的压缩解压缩命令详解及实例
- DataGridView如何绑定DataRow对象集合
- java struts2入门学习---异常处理和类型转换
- Java把数字格式化为货币字符串
- MFC 刷新函数:Invaldate,UpdateWindow,InvaldateRect
- CodeSmith无法获取Oracle表注释
热门文章
- CI 3.0.6 控制器打印base_url 地址不为 localhost的解决方法
- R语言实战(二)数据管理
- select下拉框插件(转)
- 几款极好的 JavaScript 文件上传插件
- 张艾迪(创始人):Be.Time+Cr.Idear的创新理念
- C#如果把A.new()编译成new A()
- 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)
- occ添加新的捕捉模式
- Redis常用命令入门5:有序集合类型
- 转: Redis基础总结