ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring 高级 初始化与销毁

2022-08-28 16:03:08  阅读:128  来源: 互联网

标签:初始化 销毁 Spring springframework Bean org import public


一 初始化

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,springframework,Bean,org,import,public
来源: https://www.cnblogs.com/mangoubiubiu/p/16632918.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有