欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Bean的生命周期

程序员文章站 2022-05-24 18:52:45
...

Bean ---- 创建-----初始化-----销毁的过程
构造(对象创建):

  1. 单实例:容器启动的时候创建对象

  2. 多实例:每次调用的时候创建实例

初始化:
对象创建完成,并赋值好,调用初始化方法
销毁:
单实例-容器关闭的时候执行销毁方法
多实例-容器不会调用销毁方法

1.指定初始化和销毁的方法

1.基于注解的方式
创建bean

package dong.bean;

public class Cat {

    public Cat(){
        System.out.println("--------构造器----------");
    }

    public void init(){
        System.out.println("--------init------------");
    }

    public void destroy(){
        System.out.println("--------destroy------------");
    }
}

BeanConfig等同于 <bean class="dong.bean.Cat" init-method="init" destroy-method="destory" ></bean>

package dong.config;

import dong.bean.Cat;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanConfig {

    @Bean(initMethod = "init",destroyMethod = "destroy")
    public Cat cat(){
        return new Cat();
    }
}

run

  package dong;
    
    import dong.config.BeanConfig;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class MainTest {
    
        public static void main(String[] args) {
    
            AnnotationConfigApplicationContext applicationContext1 = new AnnotationConfigApplicationContext(BeanConfig.class);
            System.out.println("容器创建完成");
    
            applicationContext1.close();
    
        }
    
    }

--------构造器----------
--------init------------
容器创建完成
--------destroy------------

2.通过Bean实现InitializingBean接口定义初始化逻辑,实现DisposableBean接口定义销毁逻辑

创建Bean

package dong.bean;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class Dog implements InitializingBean, DisposableBean {

    public Dog() {
        System.out.println("dog 构造器");
    }

    public void destroy() throws Exception {
        System.out.println("dog destroy");
    }


    public void afterPropertiesSet() throws Exception {
        System.out.println("dog init");
    }
}