Spring_管理bean的生命周期(8)
2018-04-01 09:30
447 查看
IOC 容器中 Bean 的生命周期方法
1、Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务.
2、Spring IOC 容器对 Bean 的生命周期进行管理的过程:
通过构造器或工厂方法创建 Bean 实例
为 Bean 的属性设置值和对其他 Bean 的引用
调用 Bean 的初始化方法
Bean 可以使用了
当容器关闭时, 调用 Bean 的销毁方法
3、在 Bean 的声明里设置 init-method 和 destroy-method 属性, 为 Bean 指定初始化和销毁方法.
比如定义一个Car类public class Car {
public Car(){
System.out.println("Car's Constructor.....");
}
private String brand;
public void setBrand(String brand){
System.out.println("setBrand...");
this.brand=brand;
}
public void init2(){
System.out.println("init...");
}
public void destroy(){
System.out.println("destroy....");
}
}配置文件:beans-cycle.xml<bean id="car" class="com.wgs.spring.beans.cycle.Car"
init-method="init2"
destroy-method="destroy">
<property name="brand" value="BaoMa"></property>
</bean>Main.java文件:public static void main(String[] args) {
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans-cycle.xml");
Car car=(Car) ctx.getBean("car");
System.out.println(car);
//关闭IOC容器
((AbstractApplicationContext) ctx).close();
}运行结果为:
Car's Constructor.....
setBrand...
init...
com.wgs.spring.beans.cycle.Car@6a41eaa2
destroy....
创建 Bean 后置处理器
1、Bean 后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理.
2、Bean 后置处理器对 IOC 容器里的所有 Bean 实例逐一处理, 而非单一实例. 其典型应用是: 检查 Bean 属性的正确性或根据特定的标准更改 Bean 的属性.
3、对Bean 后置处理器而言, 需要实现 (org.springframework.beans.factory.config) Interface BeanPostProcessor 接口. 在初始化方法被调用前后, Spring 将把每个 Bean 实例分别传递给上述接口的以下两个方法:
添加 Bean 后置处理器后 Bean 的生命周期
Spring IOC 容器对 Bean 的生命周期进行管理的过程:
1、通过构造器或工厂方法创建 Bean 实例
2、为 Bean 的属性设置值和对其他 Bean 的引用
3、将 Bean 实例传递给 Bean 后置处理器的 postProcessBeforeInitialization 方法
4、调用 Bean 的初始化方法
5、将 Bean 实例传递给 Bean 后置处理器的 postProcessAfterInitialization方法
6、Bean 可以使用了
7、当容器关闭时, 调用 Bean 的销毁方法
上述代码不变:增加了一个MyBeanPostProcessor.java并修改了beans-cycle.xml
MyBeanPostProcessor.java代码实现:
package com.wgs.spring.beans.MyBeanPostProcessor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
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("postProcessBeforeInitialization: "+bean+","+beanName);
return bean;
}
}
beans-cycle.xml的修改:
Car's Constructor.....
setBrand...
postProcessBeforeInitialization: com.wgs.spring.beans.cycle.Car@1bce4f0a , car
init...
postProcessBeforeInitialization: com.wgs.spring.beans.cycle.Car@1bce4f0a , car
com.wgs.spring.beans.cycle.Car@1bce4f0a
destroy....
1、Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务.
2、Spring IOC 容器对 Bean 的生命周期进行管理的过程:
通过构造器或工厂方法创建 Bean 实例
为 Bean 的属性设置值和对其他 Bean 的引用
调用 Bean 的初始化方法
Bean 可以使用了
当容器关闭时, 调用 Bean 的销毁方法
3、在 Bean 的声明里设置 init-method 和 destroy-method 属性, 为 Bean 指定初始化和销毁方法.
比如定义一个Car类public class Car {
public Car(){
System.out.println("Car's Constructor.....");
}
private String brand;
public void setBrand(String brand){
System.out.println("setBrand...");
this.brand=brand;
}
public void init2(){
System.out.println("init...");
}
public void destroy(){
System.out.println("destroy....");
}
}配置文件:beans-cycle.xml<bean id="car" class="com.wgs.spring.beans.cycle.Car"
init-method="init2"
destroy-method="destroy">
<property name="brand" value="BaoMa"></property>
</bean>Main.java文件:public static void main(String[] args) {
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans-cycle.xml");
Car car=(Car) ctx.getBean("car");
System.out.println(car);
//关闭IOC容器
((AbstractApplicationContext) ctx).close();
}运行结果为:
Car's Constructor.....
setBrand...
init...
com.wgs.spring.beans.cycle.Car@6a41eaa2
destroy....
创建 Bean 后置处理器
1、Bean 后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理.
2、Bean 后置处理器对 IOC 容器里的所有 Bean 实例逐一处理, 而非单一实例. 其典型应用是: 检查 Bean 属性的正确性或根据特定的标准更改 Bean 的属性.
3、对Bean 后置处理器而言, 需要实现 (org.springframework.beans.factory.config) Interface BeanPostProcessor 接口. 在初始化方法被调用前后, Spring 将把每个 Bean 实例分别传递给上述接口的以下两个方法:
添加 Bean 后置处理器后 Bean 的生命周期
Spring IOC 容器对 Bean 的生命周期进行管理的过程:
1、通过构造器或工厂方法创建 Bean 实例
2、为 Bean 的属性设置值和对其他 Bean 的引用
3、将 Bean 实例传递给 Bean 后置处理器的 postProcessBeforeInitialization 方法
4、调用 Bean 的初始化方法
5、将 Bean 实例传递给 Bean 后置处理器的 postProcessAfterInitialization方法
6、Bean 可以使用了
7、当容器关闭时, 调用 Bean 的销毁方法
上述代码不变:增加了一个MyBeanPostProcessor.java并修改了beans-cycle.xml
MyBeanPostProcessor.java代码实现:
package com.wgs.spring.beans.MyBeanPostProcessor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
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("postProcessBeforeInitialization: "+bean+","+beanName);
return bean;
}
}
beans-cycle.xml的修改:
<bean id="car" class="com.wgs.spring.beans.cycle.Car" init-method="init2" destroy-method="destroy"> <property name="brand" value="BaoMa"></property> </bean> <!-- 实现BeanPostProcessor接口,并具体提供以下两个方法的实现 Object postProcessBeforeInitialization(Object bean, String beanName) :init-method之前被调用 Object postProcessAfterInitialization(Object bean, String beanName) :init-method之后被调用 bean:bean 实例本身 beanName: IOC容器配置的bean的名字 返回值:是实际上返回给用户的那个bean,注意:可以在以上两个方法中修改返回的bean,甚至返回一个新的bean --> <!-- 配置bean 的后置处理器 :不需要配置id。IOC容器自动识别是一个BeanPostPorcessor--> <bean class="com.wgs.spring.beans.MyBeanPostProcessor.MyBeanPostProcessor"></bean>运行结果为:
Car's Constructor.....
setBrand...
postProcessBeforeInitialization: com.wgs.spring.beans.cycle.Car@1bce4f0a , car
init...
postProcessBeforeInitialization: com.wgs.spring.beans.cycle.Car@1bce4f0a , car
com.wgs.spring.beans.cycle.Car@1bce4f0a
destroy....
相关文章推荐
- spring bean生命周期管理--转
- Spring_10_管理 Bean 的生命周期
- Spring管理Bean的生命周期
- 【SSH三大框架】Spring基础第一篇:搭建Spring环境、实例化Bean、管理Bean的作用域以及Bean的生命周期
- Spring管理的Bean的生命周期
- Spring第五弹—–配置Spring管理的bean的作用域和生命周期
- Spring管理bean的生命周期
- Spring管理的Bean的生命周期
- Spring Bean LifeCycle 被spring管理的Bean的生命周期
- Spring学习历程---管理bean的生命周期
- (转)Spring管理的Bean的生命周期
- spring三种实例化Bean的方式和管理Bean的作用域和Bean的生命周期
- Spring学习笔记之管理Bean的生命周期
- spring容器对bean生命周期的管理三中方式
- Spring Bean 生命周期管理
- spring学习教程5-spring容器管理bean的生命周期
- 传智播客Spring2.5视频教程_Spring管理的Bean的生命周期 2
- Spring_管理 Bean 的生命周期
- Spring实现bean生命周期管理
- Spring 管理bean的生命周期