博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring(三)--Spring bean的生命周期
阅读量:4596 次
发布时间:2019-06-09

本文共 6162 字,大约阅读时间需要 20 分钟。

Spring bean的生命周期

 

          ApplicationContext Bean生命周期流程

 

 

1.需要的实体类

 

ackage com.xdf.bean;import org.springframework.beans.BeansException;import org.springframework.beans.factory.*;/** * 学生的实体类 * * Aware本意就是察觉,感觉 * 01.实现了BeanNameAware,就是让student类感觉到自己在容器中的id或者是name * 02.实现了BeanFactoryAware,就是让student类感觉到自己在容器中所属的bean工厂 * 03.实现了InitializingBean,就是为了执行初始化之后的操作 ,但是对spring产生了依赖 *         后续使用反射机制 init-method 来消除对spring的依赖 * 04.实现了DisposableBean,就是为了执行bean销毁之后的操作 ,但是对spring产生了依赖 *         后续使用反射机制 destroy-method 来消除对spring的依赖 */public class Student implements BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean{    private  int  age;  //年龄    private  String  stuName; //姓名    private  String  beanName; //bean在容器中的id或者name    private BeanFactory beanFactory; //bean所在的工厂    public Student() {        System.out.println("===Student类中的无参构造===");    }    //BeanNameAware接口中的setBeanName()    public void setBeanName(String beanName) {        System.out.println("===执行了BeanNameAware接口中的setBeanName()===");        this.beanName=beanName;    }    //BeanFactoryAware中的setBeanFactory()    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {        System.out.println("===执行了BeanFactoryAware中的setBeanFactory()===");        this.beanFactory=beanFactory;    }    public void initMethod(){        System.out.println("===Student类中的initMethod()===");    }    public void afterPropertiesSet() throws Exception {        System.out.println("===InitializingBean中的afterPropertiesSet()===");    }    public  void myDestroy(){        System.out.println("===Student类中的myDestroy()===");    }    public void destroy() throws Exception {        System.out.println("===DisposableBean中的destroy()===");    }    public int getAge() {        return age;    }    public void setAge(int age) {        System.out.println("===Student类中给属性赋值 setAge()===");        this.age = age;    }    public String getStuName() {        return stuName;    }    public void setStuName(String stuName) {        System.out.println("===Student类中给属性赋值 setStuName()===");        this.stuName = stuName;    }    public String getBeanName() {        return beanName;    }    public BeanFactory getBeanFactory() {        return beanFactory;    }    @Override    public String toString() {        return "Student{" +                "age=" + age +                ", stuName='" + stuName + '\'' +                '}';    }

2.需要的InstantiationAwareBeanPostProcessorAdapter

 

package com.xdf.bean;import org.springframework.beans.BeansException;import org.springframework.beans.PropertyValues;import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter;import java.beans.PropertyDescriptor;/** * bean实例化之前 和之后 */public class MyInitAwareBeanpostAdpater  extends InstantiationAwareBeanPostProcessorAdapter{    public  MyInitAwareBeanpostAdpater(){        System.out.println("*****MyInitAwareBeanpostAdpater的无参构造*****");    }    //在实例化bean之前调用    @Override    public Object postProcessBeforeInstantiation(Class
beanClass, String beanName) throws BeansException { System.out.println("*****执行了MyInitAwareBeanpostAdpater的 postProcessBeforeInstantiation *****"); return null; //底层返回的就是null } //在实例化bean之后调用 @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("*****执行了MyInitAwareBeanpostAdpater的 postProcessAfterInitialization *****"); return bean; } @Override public PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException { System.out.println("*****执行了MyInitAwareBeanpostAdpater的 postProcessPropertyValues *****"); return pvs; }}

 

3.需要的BeanPostProcessor

 

package com.xdf.bean;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;/** * Processor  本意是加工 处理的意思! * * 实现了BeanPostProcessor */public class MyBeanPostProcessor implements BeanPostProcessor {    public MyBeanPostProcessor(){        System.out.println("===MyBeanPostProcessor的无参构造方法 ===");    }    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {        System.out.println("===执行了BeanPostProcessor中的 postProcess ==Before==Initialization  ===");        return bean;    }    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {        System.out.println("===执行了BeanPostProcessor中的 postProcess ==After==Initialization  ===");        return bean;    }}

 

4.需要的BeanFactoryPostProcessor

 

package com.xdf.bean;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanDefinition;import org.springframework.beans.factory.config.BeanFactoryPostProcessor;import org.springframework.beans.factory.config.BeanPostProcessor;import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;/** * Processor  本意是加工 处理的意思! * * 实现了BeanFactoryPostProcessor   工厂的后处理器 */public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {    public MyBeanFactoryPostProcessor(){        System.out.println("===MyBeanFactoryPostProcessor的无参构造方法 ===");    }    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {        System.out.println("===MyBeanFactoryPostProcessor的postProcessBeanFactory ===");        BeanDefinition beanDefinition = beanFactory.getBeanDefinition("student");        beanDefinition.getPropertyValues().addPropertyValue("stuName","小白");    }}

 

5.需要的xml文件配置

 

 

 

6.需要的测试代码

 

/** * 测试bean生命周期 */public class LifeCycle {    public static void main(String[] args) {        ApplicationContext  context=new ClassPathXmlApplicationContext("spring.xml");        Student student= context.getBean("student", Student.class);        System.out.println(student);        ((ClassPathXmlApplicationContext)context).close();  //关闭容器    }}

   

    未完待续!!!

转载于:https://www.cnblogs.com/fl72/p/9628444.html

你可能感兴趣的文章
快速备份和还原 MySQL 数据库的另一种方法
查看>>
Java读取其他jar包里的配置文件
查看>>
javascript好文分享
查看>>
python-day54--前端之js-DOM对象
查看>>
树链剖分
查看>>
记录自己不会的地方---ashx中接收不到session
查看>>
实习网申小技巧
查看>>
JS认证Exchange
查看>>
php面试题之一——HTML+CSS(基础部分)
查看>>
用MATLAB怎么实现曲线拟合?
查看>>
react-native组件封装与传值
查看>>
Xml
查看>>
后台管理界面
查看>>
无线话筒U段和V段有哪些本质区别?
查看>>
Delphi判断文件是否正在被使用
查看>>
AutoCAD(英文版)中所有英语词汇的翻译
查看>>
powerdesigner添加mysql的字符集ENGINE和DEFAULT CHARACTER SET
查看>>
在.net中使用WebBrowser
查看>>
委托和事件
查看>>
x名称空间详解
查看>>