详细介绍:Bean的生命周期

Bean的生命周期

  • 一个对象的生命周期包括创建(实例化与初始化)使用以及销毁等阶段,在Spring中,Bean对象周期也遵循这一过程,但是Spring提供了许多对外接口,允许开发者对3个过程(实例化,初始化,销毁)的前后做一些操作。在Spring Bean中,实例化是为Bean对象开辟空间,初始化则对属性初始化。
  • spring容器可以管理singleton的作用域Bean的生命周期,在此作用域下,Spring能够精确地知道Bean何时被创建,何时初始化完成,以及何时被销毁。而对于prototype作用域的Bean,Spring只负责创建,当容器创建了Bean的实例后,Bean的实例就交给了客户端的代码管理,Spring容器将不再跟踪其生命周期,并且不会管理那些配置成prototype作用域的Bean。Spring中Bean的生命周期的执行是一个很复杂的过程,可借鉴Servlet的生命周期“实例化----》初始化–》(init)-----》接收请求(service)—》销毁(destroy)来理解bean的生命周期
    Bean的生命周期的整个过程
    (1)根据Bean的配置情况实例化一个Bean
    (2)根据spring上下文实例化的Bean进行依赖注入,即对Bean的属性进行初始化操作。
    (3)如果Bean实现类BeanNameAware接口,将调用它实现的setBeanName(String beanId)方法,此处参数传递的是Spring配置文件中Bean的id。
    (4)如果Bean实现了BeanFactoryAware接口,将调用它实现的setBeanFactory方法,此处参数传递的是当前Spring工厂实例的引用。
    (5)如果Bean实现了ApplicationContextAware接口,将调用它实现的 setApplicationContext(ApplicationContext)方法,此处参数传递的是Spring上下文的引用。
    (6)如果Bean关联了BeanPostProcessor接口,将调用初始化方法postProcessBeforeInitialization(Object obj,String s)对Bean进行操作。
    (7)如果Bean实现了InitializeingBean接口,将调用afterPropertiesSet方法。
    (8)如果Bean在Spring配置文件中配置了init-method属性,将自动调用其配置的初始化方法。
    (9)如果Bean关联了BeanPostProcessor接口,将调用postProcessAfterInitialzation(Object obj,String s)方法,由于是在Bean初始化结束时调用After方法,也可用于内存或缓存技术。
    注意:以上工作完成后就可以使用该Bean,由于该Bean的作用域是singleton,所有调用的是同一个Bean实例
    (10)当bean不再需要时将进行销毁阶段,如果Bean实现了DisposableBean接口,则调用其实现的destroy方法将Spring中的Bean销毁。
    (11)如果在配置文件中通过destroy-method属性指定了Bean的销毁方法,将调用其配置的销毁方法进行销毁。
    在Spring中,可以随意配置<bean 元素的属性,但不建议过多地使用Bean实现接口,因为这样将时代码和Spring聚合比较紧密。
    1.创建Bean的实现类
package life;

public class BeanLife {
    public void initMySelf(){
        System.out.println(this.getClass()+"执行自定义的初始化工具");
    }
    public void destroyMyself(){
        System.out.println(this.getClass().getName()+"执行自定义的销毁方法");
    }
}

2.配置Bean
在Spring配置文件中使用实现类BeanLife配置一个id为beanLife的Bean。

<!--配置bean,使用init-method属性指定初始化方法,使用destroy-method属性指定销毁方法-->
   <bean id="beanLife" class="life.BeanLife" init-method="initMySelf" destroy-method="destroyMyself"/>

3测试生命周期

package test;

import life.BeanLife;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestLife {
    public static void main(String[] args) {
        //为了方便演示销毁方法的执行 加载配置文件   这里使用ClassPathXmlApplicationContext
        ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext");
        System.out.println("获得对象前:");
        BeanLife beanLife=(BeanLife)ctx.getBean("beanLife");
        System.out.println("获得对象后"+beanLife);
        ctx.close();


    }
}

结果

在这里插入图片描述

  • 在配置文件时执行了Bean的初始化方法initMyself;在获取对象后,关闭容器时,执行了Bean的销毁方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值