首页 > 其他分享 >Spring 高级 初始化与销毁

Spring 高级 初始化与销毁

时间:2022-08-28 16:03:07浏览次数:36  
标签:初始化 销毁 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
From: https://www.cnblogs.com/mangoubiubiu/p/16632918.html

相关文章

  • spring学习
    pringBoot自动装配原理及分析通过注解@SpringBootApplication=>@EnableAutoConfiguration=>@Import({AutoConfigurationImportSelector.class})实现自动装配2)AutoConfigu......
  • Spring 高级 @Autowired 失效分析
    一、失效演示1、正常情况packagecom.mangoubiubiu.show.a06;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;......
  • 使用Gradle构建spring-boot多模块项目
    一、目录结构.├──boogle-common│  ├──build.gradle.kts│  └──src├──boogle-core│  ├──build.gradle.kts│  └──src├──......
  • Spring5.2.x-06-Spring扫描原理
    在ConfigurationClassPostProcessor内部完成扫描在扫描的时候,为什么要用asm,如果直接用类,可能会把static里的直接执行了,spring尽量做到不直接影响用户(比如这......
  • Spring 高级 Aware 接口及 InitializingBean 接口
    一、Aware1、Aware接口的作用Aware接口提供了一种【内置】的注入手段,例如BeanNameAware注入bean的名字BeanFactoryAware注入BeanFactory容器ApplicationC......
  • Referenced file contains errors (http://www.springframework.org/schema/beans/spr
    Referencedfilecontainserrors(http://www.springframework.org/schema/beans/spring-beans-3.0.xsd)._faihtua的博客-CSDN博客 https://blog.csdn.net/faihtua/arti......
  • Spring 高级 工厂后处理器模拟实现-Mapper
    一、源方式自动注入packagecom.mangoubiubiu.show.a05;importcom.alibaba.druid.pool.DruidDataSource;importcom.mangoubiubiu.show.a05.component.Bean2;impor......
  • Spring源码-自定义标签
    一、新建实体类publicclassUserimplementsSerializable{privateStringid;privateStringname;privateIntegerage;publicStringgetId(){ return......
  • spring源码具体细节 super setConfigLocations
      1首先先调用super父类构造方法 classPathXmlApplicaitonContext 初始化成员属性  依然掉父类构造方法 调用父类 资源处理器 当前系统需要运行所......
  • Spring源码01:环境搭建
    写在开始:这个系列会陆续更新我学习Spring源码的一些笔记与自己的理解,由于本人水平有限,难免对有些知识理解不到位,亦或者手误导致文中有不正确的地方,欢迎各位指正与探讨。......