Spring学习(6)--Spring中bean的生命周期
2017-12-11 23:31
477 查看
Spring IOC容器的本质目的就是为了管理Bean。对于Bean而言,在容器中存在其生命周期,它的初始化和销毁也需要一个过程,在一些需要自定义的过程中,我们可以插入代码去改变他们的一些行为,以满足特定的需求。
1.初始化Bean。容器寻找Bean的定义信息并将其实例化。
2.依赖注入。使用依赖注入,Spring按照Bean定义信息配置Bean所有属性。
3.调用BeanNameAware的setBeanName()。如果bean实现了接口BeanNameAware的setBeanName()方法。
4.调用BeanFactoryAware的setBeanFactory()。如果bean实现了接口BeanFactoryAware的setBeanFactory()方法。
5.调用ApplicationContextAware的setApplicationContext(ApplicationContext)。如果Bean实现了接口ApplicationContextAware的setApplicationContext(ApplicationContext)方法。
6.如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,设置可以返回新的bean。
7.调用InitializingBean的afterPropertiesSet()。如果bean实现了接口InitializingBean的afterPropertiesSet()方法。
8.如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的自定义初始化方法。
9.如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法。
10.调用DisposableBean的destroy()。如果bean实现了接口DisposableBean的destroy()方法。
11.如果这个Bean的Spring中配置了destroy-method属性,会自动调用其配置的自定义销毁方法。
Java文件代码:
package com.study.cycle;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class Car implements BeanFactoryAware,BeanNameAware,ApplicationContextAware,InitializingBean,DisposableBean{
private String brand;
public Car(){
System.out.println("Car的构造方法。。。。。。。。。。。");
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
System.out.println("setBrand........");
this.brand = brand;
}
public void init(){
System.out.println("init car.........");
}
public void destory(){
System.out.println("destory car.........");
}
@Override
public String toString() {
return "Car [brand=" + brand + "]";
}
@Override
public void setBeanFactory(BeanFactory arg0) throws BeansException {
System.out.println("set
4000
BeanFactory..........");
}
@Override
public void setBeanName(String arg0) {
System.out.println("setBeanName..........");
}
@Override
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
System.out.println("setApplicationContext..........");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet..........");
}
@Override
public void destroy() throws Exception {
System.out.println("DisposableBean的destory..........");
}
}
xml文件代码;
<!--关联的Bean后置处理器(BeanPostProcessor) -->
<bean class="com.study.cycle.MyBeanPostProcessor"></bean>
<bean id="car" class="com.study.cycle.Car" init-method="init" destroy-method="destory">
<property name="brand" value="Audi"></property>
</bean>实现Bean后置处理器的Java类代码:
package com.study.cycle;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessAfterInitialization.........."+bean+","+beanName);
return bean;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessBeforeInitialization.............."+bean+","+beanName);
return bean;
}
}
测试代码:
public static void main(String[] args) {
ClassPathXmlApplicationContext app=new ClassPathXmlApplicationContext("beans-cycle.xml");
Car car=(Car) app.getBean("car");
System.out.println(car);
app.close();
}
测试结果:
Car的构造方法。。。。。。。。。。。
setBrand........
setBeanName..........
setBeanFactory..........
setApplicationContext..........
postProcessBeforeInitialization..............Car [brand=Audi],car
afterPropertiesSet..........
init car.........
postProcessAfterInitialization..........Car [brand=Audi],car
Car [brand=Audi]
DisposableBean的destory方法..........
destory car.........
1.初始化Bean。容器寻找Bean的定义信息并将其实例化。
2.依赖注入。使用依赖注入,Spring按照Bean定义信息配置Bean所有属性。
3.调用BeanNameAware的setBeanName()。如果bean实现了接口BeanNameAware的setBeanName()方法。
4.调用BeanFactoryAware的setBeanFactory()。如果bean实现了接口BeanFactoryAware的setBeanFactory()方法。
5.调用ApplicationContextAware的setApplicationContext(ApplicationContext)。如果Bean实现了接口ApplicationContextAware的setApplicationContext(ApplicationContext)方法。
6.如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,设置可以返回新的bean。
7.调用InitializingBean的afterPropertiesSet()。如果bean实现了接口InitializingBean的afterPropertiesSet()方法。
8.如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的自定义初始化方法。
9.如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法。
10.调用DisposableBean的destroy()。如果bean实现了接口DisposableBean的destroy()方法。
11.如果这个Bean的Spring中配置了destroy-method属性,会自动调用其配置的自定义销毁方法。
Java文件代码:
package com.study.cycle;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class Car implements BeanFactoryAware,BeanNameAware,ApplicationContextAware,InitializingBean,DisposableBean{
private String brand;
public Car(){
System.out.println("Car的构造方法。。。。。。。。。。。");
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
System.out.println("setBrand........");
this.brand = brand;
}
public void init(){
System.out.println("init car.........");
}
public void destory(){
System.out.println("destory car.........");
}
@Override
public String toString() {
return "Car [brand=" + brand + "]";
}
@Override
public void setBeanFactory(BeanFactory arg0) throws BeansException {
System.out.println("set
4000
BeanFactory..........");
}
@Override
public void setBeanName(String arg0) {
System.out.println("setBeanName..........");
}
@Override
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
System.out.println("setApplicationContext..........");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet..........");
}
@Override
public void destroy() throws Exception {
System.out.println("DisposableBean的destory..........");
}
}
xml文件代码;
<!--关联的Bean后置处理器(BeanPostProcessor) -->
<bean class="com.study.cycle.MyBeanPostProcessor"></bean>
<bean id="car" class="com.study.cycle.Car" init-method="init" destroy-method="destory">
<property name="brand" value="Audi"></property>
</bean>实现Bean后置处理器的Java类代码:
package com.study.cycle;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessAfterInitialization.........."+bean+","+beanName);
return bean;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessBeforeInitialization.............."+bean+","+beanName);
return bean;
}
}
测试代码:
public static void main(String[] args) {
ClassPathXmlApplicationContext app=new ClassPathXmlApplicationContext("beans-cycle.xml");
Car car=(Car) app.getBean("car");
System.out.println(car);
app.close();
}
测试结果:
Car的构造方法。。。。。。。。。。。
setBrand........
setBeanName..........
setBeanFactory..........
setApplicationContext..........
postProcessBeforeInitialization..............Car [brand=Audi],car
afterPropertiesSet..........
init car.........
postProcessAfterInitialization..........Car [brand=Audi],car
Car [brand=Audi]
DisposableBean的destory方法..........
destory car.........
相关文章推荐
- spring学习笔记:spring中bean的生命周期
- Spring学习之Bean装配、生命周期。。
- 【Spring学习20】bean作用域:理解Bean生命周期
- Spring源码学习--Bean的生命周期
- spring学习笔记八 bean生命周期
- spring学习(-)关于bean的生命周期
- ITCAST视频-Spring学习笔记(Spring管理的Bean的生命周期)
- Spring学习-- IOC 容器中 bean 的生命周期
- spring的学习小结6_bean的生命周期
- Spring学习笔记之bean生命周期
- 7.1.【Spring学习】Bean生命周期
- Spring 学习第十天: IOC容器中Bean的生命周期
- spring学习教程5-spring容器管理bean的生命周期
- Spring学习----------Bean生命周期介绍
- spring学习之bean的生存范围和生命周期
- Spring学习笔记之管理Bean的生命周期
- Spring学习笔记二: Bean装配及生命周期
- Spring 学习笔记---Bean的生命周期
- Spring学习笔记(2)-Spring中bean的生命周期
- Spring学习笔记(1):Bean的生命周期管理