Spring学习之路(三):Bean完整的生命周期及使用后处理Bean产生代理增强特定方法

一、Spring Bean完整的生命周期流程

在这里插入图片描述

  • Instantiate 实例化Bean,这一步是使用Bean的构造方法实例化Bean,可以是无参构造方法也可以是有参构造方法。
  • Populate properties 如果该Bean有属性且已经声明让Spring注入则会在这一步为Bean注入属性。
  • BeanNameAware 如果该Bean实现了该接口,则Bean会调用setBeanName方法,这一步Bean可以通过setBeanName方法得到Bean在配置中的名字。
  • BeanFactoryAware 如果该Bean实现了该接口(或者实现ApplicationContextAware接口),则Bean会调用setBeanFactory方法(或者调用setApplicationContext方法),这一步Bean可以获得配置信息。
  • BeanPostProcessor 如果存在类实现BeanPostProcessor(后处理Bean),则会执行postProcessBeforeInitialization方法,这个方法是Spring所有的Bean初始化都经过的执行的方法。
  • InitializingBean 如果Bean实现了InitializingBean 接口,则Bean会调用afterPropertiesSet方法。这个方法用来完成一些特殊的初始化操作,并且是在属性都设置好后才会被beanFactory调用。
  • init-method 如果Bean编写了并配置了自己的初始化方法,即 < bean id=“xxx” class=“yyy” init-method=“zzz”/>中的zzz方法会被调用。
  • BeanPostProcessor 如果存在类实现BeanPostProcessor(后处理Bean),则会执行postProcessAfterInitialization方法,这个方法是Spring所有的Bean初始化都经过的执行的方法。
  • 这时候Bean已经准备就绪,可以执行Bean的业务代码。
  • DisposableBean 如果Bean实现了DisposableBean接口,则会调用destroy方法,此时Spring会对Bean进行销毁。
  • destroy-method 如果Bean编写了并配置了自己的销毁方法,即 < bean id=“xxx” class=“yyy” destroy-method=“zzz”/>中的zzz方法会被调用。

二、演示Bean完整的生命周期

按照上面Bena的生命周期流程,演示一遍:
首先创建类BeanLive,并添加一个String的属性成员property,然后按照步骤一步一步将代码填入:

  • 构造方法

      public BeanLive(){
         
       System.out.println("第一步:初始化BeanLive类");
    }
    
  • 属性注入

     public void setProperty(String property) {
         
       System.out.println("第二步:设置BeanLive属性");
       this.property = property;
    }
    
  • 实现BeanNameAware接口,编写setBeanName方法

     //设置BeanLive的名称,就是Bean在Spring配置文件中的名称,即Bean的id
      public void setBeanName(String name) {
         
       System.out.println("第三步:设置BeanLive的名称:" + name);
    }
    
  • 实现ApplicationContextAware接口,编写setApplicationContext方法

    //让Bean工获得厂的信息
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
         
       System.out.println("第四步:了解工厂的信息");
    }
    
  • 创建类MyBeanPostProcessor实现BeanPostProcessor接口,在该类中编写postProcessBeforeInitialization方法

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
         
       System.out.println(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值