Spring框架学习笔记-Bean的生命周期

拿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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值