Spring 高级 初始化与销毁

2022/8/28 23:24:57

本文主要是介绍Spring 高级 初始化与销毁,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一 初始化

1、简介

Spring 提供了多种初始化手段,除了 @PostConstruct,@Bean(initMethod) 之外,还可以实现 InitializingBean 接口来进行初始化,如果同一个 bean 用了以上手段声明了 3 个初始化方法,那么它们的执行顺序是

  1. @PostConstruct 标注的初始化方法
  2. InitializingBean 接口的初始化方法
  3. @Bean(initMethod) 指定的初始化方法 

2、代码演示

package com.mangoubiubiu.show.a07;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;

import javax.annotation.PostConstruct;

@Slf4j
public class Bean1  implements InitializingBean {

    @PostConstruct
    public void init(){
        log.info("PostConstruct init 初始化1");
    }


    public void init2(){
        log.info("Bean init init2 初始化2");
    }

    @Override
    public void afterPropertiesSet() throws Exception { log.info("InitializingBean 初始化2");
    }
}
package com.mangoubiubiu.show.a07;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class A07Application {


    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(A07Application.class);
        run.close();

    }


    @Bean(initMethod = "init2")
    public Bean1 bean1(){
        return new Bean1();
    }

}

二 销毁

1、简介

与初始化类似,Spring 也提供了多种销毁手段,执行顺序为

  1. @PreDestroy 标注的销毁方法
  2. DisposableBean 接口的销毁方法
  3. @Bean(destroyMethod) 指定的销毁方法 

2、代码演示

package com.mangoubiubiu.show.a07;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Slf4j
public class Bean2 implements DisposableBean {

    @PreDestroy
    public void destroy1(){
        log.info("PreDestroy   销毁");
    }


    public void destroy2(){
        log.info("Bean  初始化1");
    }



    @Override
    public void destroy() throws Exception {
        log.info("DisposableBean 销毁2");
    }
}
package com.mangoubiubiu.show.a07;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class A07Application {


    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(A07Application.class);
        run.close();

    }


//    @Bean(initMethod = "init2")
//    public Bean1 bean1(){
//        return new Bean1();
//    }


    @Bean(destroyMethod = "destroy")
    public Bean2 bean2(){
        return new Bean2();
    }

}

三 面试重点

初始化和销毁方法的执行顺序一样,先执行扩展,再执行接口方式的初始化,再执行Bean注解内方法的初始化

 



这篇关于Spring 高级 初始化与销毁的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程