您的位置:首页 > 编程语言 > Java开发

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.........
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: