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

spring Bean 的生命周期

2016-11-18 15:02 661 查看

Bean的生命周期



Bean生命周期分类

1.Bean自身方法:构造方法,set方法,init-method,destroy-method方法

2.Bean级生命周期接口方法:BeanNameAware , BeanFactoryAware

3.容器级生命周期接口方法:InstantiationAwareBeanPostProcessor , BeanPostProcessor,不由Bean实现

例子

Bean类

package com.imooc.lifecycle;

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;

public class BeanLifeCycle implements InitializingBean ,DisposableBean , BeanNameAware , BeanFactoryAware{

@SuppressWarnings("unused")
private String name ;

public void setName(String name) {
this.name = name;
System.out.println("设置属性值");
}

public BeanLifeCycle(String name) {
super();
this.name = name;
System.out.println("调用构造器");
}

public void defautInit() {
System.out.println("Bean defautInit.");
}

public void defaultDestroy() {
System.out.println("Bean defaultDestroy.");
}

@Override
public void destroy() throws Exception {
System.out.println("DisposableBean  ::: Bean destroy.");
}

@Override
public void afterPropertiesSet() throws Exception {
System.out.println("InitializingBean  ::::  Bean afterPropertiesSet.");
}

public void start() {
System.out.println("init-method中配置的初始化方法 :::: Bean start .");
}

public void stop() {
System.out.println("destroy-method中配置的销毁方法:::: Bean stop.");
}

@Override
public void setBeanName(String arg0) {
System.out.println("BeanNameAware::::" + arg0);
}

@Override
public void setBeanFactory(BeanFactory arg0) throws BeansException {
System.out.println("BeanFactoryAware ::::" + arg0.getClass().getName() );
}

}


BeanPostProcessor

package com.imooc.lifecycle;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class ExampleBeanPostProcessor implements BeanPostProcessor{

@Override
public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException {
System.out.println("BeanPostProcessor:::::postProcessAfterInitialization   "  + arg1);
return arg0;
}

@Override
public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException {
System.out.println("BeanPostProcessor:::::postProcessBeforeInitialization   "  + arg1);
return arg0;
}

}


InstantiationAwareBeanPostProcessor

package com.imooc.lifecycle;

import java.beans.PropertyDescriptor;

import org.springframework.beans.BeansException;
import org.springframework.beans.PropertyValue;
import org.springframework.beans.PropertyValues;
import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor;

public class ExampleInstantionAwareBeanPostProcessor implements InstantiationAwareBeanPostProcessor {

@Override
public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException {
System.out.println("InstantionAwareBeanPostProcessor::::postProcessAfterInitialization ::    " + arg1);
return arg0;
}

@Override
public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException {
System.out.println("InstantionAwareBeanPostProcessor::::postProcessBeforeInitialization ::    " + arg1);
return arg0;
}

@Override
public boolean postProcessAfterInstantiation(Object arg0, String arg1) throws BeansException {
System.out.println("InstantionAwareBeanPostProcessor::::postProcessAfterInstantiation ::    " + arg1);
return true;
}

@Override
public Object postProcessBeforeInstantiation(Class<?> arg0, String arg1) throws BeansException {
System.out.println("InstantionAwareBeanPostProcessor::::postProcessBeforeInstantiation ::    " + arg1);
return null;
}

@Override
public PropertyValues postProcessPropertyValues(PropertyValues arg0, PropertyDescriptor[] arg1, Object arg2,
String arg3) throws BeansException {
System.out.println("====================PropertyValues===================");
PropertyValue[] ps = arg0.getPropertyValues() ;
for(PropertyValue p : ps){
System.out.println(p.getName() + "   " + p.getValue());
}
System.out.println("====================PropertyValues===================");
// TODO Auto-generated method stub
return arg0;
}

}


配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-init-method="defautInit" default-destroy-method="defaultDestroy">

<bean id="beanLifeCycle" class="com.imooc.lifecycle.BeanLifeCycle"
init-method="start" destroy-method="stop" >
<constructor-arg name="name" value="value"></constructor-arg>
<property name="name" value="property"></property>
</bean>

<bean class="com.imooc.lifecycle.ExampleInstantionAwareBeanPostProcessor"  ></bean>

<bean class="com.imooc.lifecycle.ExampleBeanPostProcessor"  ></bean>

</beans>


参考

极客学院教学视频
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring bean