拿Notability做了一个流程图,字写得渣渣,各位大佬见谅0.0
附上实例代码:参考是《Spring 3.X企业应用开发实战》
package com.baobaotao;
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 Car implements BeanFactoryAware,BeanNameAware,InitializingBean,DisposableBean{
private String color;
private String brand;
private int maxSpeed;
private BeanFactory beanFactory;
private String beanName;
public Car(){
System.out.println("调用构造函数!");
}
public String getColor(){
return color;
}
public String getBrand(){
return brand;
}
public int getMaxSpeed(){
return maxSpeed;
}
public void setColor(String color){
this.color=color;
}
public void setBrand(String brand){
this.brand=brand;
}
public void setMaxSpeed(int maxSpeed){
this.maxSpeed=maxSpeed;
}
public void introduce(){
System.out.print("brand:"+brand+",color:"+color+",maxSpeed:"+maxSpeed);
}
public void destroy() throws Exception {
System.out.println("调用DisposabalBean.destroy()!");
}
public void afterPropertiesSet() throws Exception {
System.out.println("调用InitializingBean.afterPropertiesSet()!");
}
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println("调用BeanFactoryAware.setBeanFactory()!");
this.beanFactory=beanFactory;
}
public void setBeanName(String beanName) {
System.out.println("调用BeanFactoryAware.setBeanName()!");
this.beanName=beanName;
}
public void myInit(){
System.out.println("调用init-method所指定的myInit(),将maxSpeed设置为240!");
this.maxSpeed=240;
}
public void myDestroy(){
System.out.println("调用destroy-method所指定的myDestroy()!");
}
}
package com.baobaotao;
import java.beans.PropertyDescriptor;
import org.springframework.beans.BeansException;
import org.springframework.beans.PropertyValues;
import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter;
public class MyInstantiationAwareBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter{
public Object PostProcessBeforeInstantiation(Class beanClass,String beanName)throws BeansException{
if("car".equals(beanName)){
System.out.println("调用InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation!");
}
return null;
}
public boolean PostProcessAfterInstantiation(Object bean,String beanName)throws BeansException{
if("car".equals(beanName)){
System.out.println("调用InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation!");
}
return true;
}
public PropertyValues postProcessPropertyValues(PropertyValues pvs,PropertyDescriptor[] pds,Object bean,String beanName)throws BeansException{
if("car".equals(beanName)){
System.out.println("调用InstantiationAwareBeanPostProcessor.postProcessPropertyValues!");
}
return pvs;
}
}
package com.baobaotao;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class MyBeanPostProcessor implements BeanPostProcessor{
public Object postProcessBeforeInitialization(Object bean,String beanName)throws BeansException{
if(beanName.equals("car")){
Car car=(Car)bean;
if(car.getColor()==null){
System.out.println("调用BeanPostProcessor.postProcessBeforeInitialization");
car.setColor("白色");
}
}
return bean;
}
public Object postProcessAfterInitialization(Object bean,String beanName)throws BeansException{
if(beanName.equals("car")){
Car car=(Car)bean;
if(car.getMaxSpeed()>=240){
System.out.println("调用BeanPostProcessor.postProcessAfterInitialization,将maxSpeed调节为200!");
car.setMaxSpeed(200);
}
}
return bean;
}
}
package com.baobaotao;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import com.baobaotao.Car;
import com.baobaotao.MyInstantiationAwareBeanPostProcessor;
import com.baobaotao.MyBeanPostProcessor;
public class BeanLifeCycle {
private static void LifeCycleInBeanFactory(){
Resource res=new ClassPathResource("com/baobaotao/beans.xml");
BeanFactory bf=new XmlBeanFactory(res);
((ConfigurableBeanFactory)bf).addBeanPostProcessor(new MyBeanPostProcessor());
((ConfigurableBeanFactory)bf).addBeanPostProcessor(new MyInstantiationAwareBeanPostProcessor());
Car car1=(Car)bf.getBean("car");
car1.introduce();
car1.setColor("红色");
Car car2=(Car)bf.getBean("car");
car2.introduce();
System.out.println("car1==car2:"+(car1==car2));
((XmlBeanFactory)bf).destroySingletons();
}
public static void main(String[] args){
LifeCycleInBeanFactory();
}
}
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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
<bean id="car" class="com.baobaotao.Car"
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
init-method="myInit"
destroy-method="myDestroy"
p:brand="红旗CA72"
/>
</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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
</beans>
最后,有什么问题可以留言大家一起讨论呀!新手上路,请各位老司机带带0-0