一、概述

  Spring IOC 容器可以管理 bean 的生命周期,Spring 允许在 bean 生命周期内特定的时间点执行指定的任务

二、bean 的生命周期

  Spring IOC 容器对 bean 的生命周期进行管理的过程:
    ① 通过构造器或工厂方法创建 bean 实例;
    ② 为 bean 的属性设置值或对其他 bean 的引用(依赖注入);
    ③ 调用 bean 的初始化方法;
    ④ 使用 bean;
    ⑤ 当容器关闭时,调用 bean 的销毁方法;
    当在 bean 中声明了 init() 和 destroy() 方法,Spring IOC 容器并不知道,所以在配置 bean 时,需要使用 init-method 和 destroy-method 属性为 bean 指定初始化和销毁方法。
    注意
          使用 ApplicationContext 创建的引用,它里面并没有关闭的方法,所以,想要关闭 IOC 容器,需要调用 ConfigurableApplicationContext(接口) 或 ClassPathXmlApplicationContext(实现类) 的 close() 方法。
 
  创建 Java 类:
public class Person {
     
     private Integer id;
     
     private String sex;
     
     private String name;
     public Person() {
         super();
         System.out.println("1.创建对象");
     }
     public Person(Integer id, String sex, String name)  {
         super();
         this.id = id;
         this.sex = sex;
         this.name = name;
     }
     public Integer getId() {
         return id;
     }
     public void setId(Integer id) {
         System.out.println("2.依赖注入");
         this.id = id;
     }
     public String getSex() {
         return sex;
     }
     public void setSex(String sex) {
         this.sex = sex;
     }
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     @Override
     public String toString() {
         return "4. Person [id=" + id + ", sex=" + sex  + ", name=" + name + "]";
     }
     
     public void init() {
         System.out.println("3. 初始化");
     }
     
     public void destroy () {
         System.out.println("5. 销毁");
     }
}

 

 
  配置文件:
    <!--
        生命周期:bean 的创建到销毁:
            IOC 容器中注册的 bean;
                (1)单例 bean:容器启动的时候就会创建好,容器关闭也会销毁创建的 bean;
                (2)多实例 bean:获取的时候才创建
            我们可以为 bean 自定义一些生命周期方法,Spring 在创建或者销毁的时候就会调用指定的方法
            自定义初始化方法和销毁方法:The method must have no arguments, but may throw any exception.
                init-method:
                destroy-method
    -->
    <bean id="person" class="com.spring.ioc.life.Person"  init-method="init" destroy-method="destroy">
        <property name="id" value="1001"></property>
        <property name="sex" value="男"></property>
    </bean>

 

 
  测试代码:
    /**
     *  单例:Bean 的生命周期
     *      (容器启动)构造器 ---> 初始化方法 ---> 使用 ---> (容器关闭)销毁方法
     *
     *  多实例 Bean 的生命周期
     *      获取 bean (构造器 ---> 初始化方法) ---> 容器关闭不会调用 bean 的销毁方法
     */
    @Test
    public void test8() {
        ConfigurableApplicationContext ioc = new ClassPathXmlApplicationContext("ioc3.xml");

        Person person = ioc.getBean("person",  Person.class);
        System.out.println(person);

        ioc.close();
    }

 

 
 
 
posted on 2021-10-17 13:57  格物致知_Tony  阅读(44)  评论(0编辑  收藏  举报