• Spring5学习笔记07--Bean 初始化与销毁


    内容概要:

    • Spring 提供了多种初始化和销毁手段
    • 它们的执行顺序
    • Bean 初始化方式
      • 使用 @PostConstruct 注解标注方法进行 Bean 初始化
      • 实现 InitializingBean 接口,重写 afterPropertiesSet()方法
      • 使用 @Bean 注解中的 initMethod 属性,标注Bean初始化方法
    • 初始化执行顺序
      • 注解@PostConstruct 方式最先执行,在 BeanPostProcessor 初始化扩展时执行
      • 接口 InitializingBean 方式其次执行
      • 注解 @Bean(initMethod = “xxx”) 方式最后执行, 初始化方法是设置在 BeanDefinition 中
    • Bean 销毁方式
      • 使用 @PreDestroy 注解标注方法进行 Bean 销毁
      • 实现 Disposable 接口,重写 destroy()方法
      • 使用 @Bean 注解中的 destroyMethod 属性,标注Bean初始化方法
    • 销毁执行顺序
      • 注解@PreDestroy 方式最先执行
      • 接口 Disposable 方式其次执行
      • 注解 @Bean(destroyMethod = “xxx”) 方式最后执行
    @SpringBootApplication
    public class BeanInitAndDestroy {
    
        public static void main(String[] args) {
            ConfigurableApplicationContext context = SpringApplication.run(BeanInitAndDestroy.class, args);
            // 销毁容器
            context.close();
        }
    
        @Bean(initMethod = "init3")
        public Bean1 bean1() {
            return new Bean1();
        }
    
        @Bean(destroyMethod = "destroy3")
        public Bean2 bean2() {
            return new Bean2();
        }
    
        @Slf4j
        static class Bean1 implements InitializingBean {
    
            @PostConstruct
            public void init1() {
                log.debug("初始化1");
            }
    
            @Override
            public void afterPropertiesSet() throws Exception {
                log.debug("初始化2");
            }
    
            public void init3() {
                log.debug("初始化3");
            }
        }
    
    
        @Slf4j
        static class Bean2 implements DisposableBean {
    
            @PreDestroy
            public void destory1() {
                log.debug("销毁1");
            }
    
            @Override
            public void destroy() throws Exception {
                log.debug("销毁2");
            }
    
            public void destroy3() {
                log.debug("销毁3");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    输出

    BeanInitAndDestroy$Bean1     : 初始化1
    BeanInitAndDestroy$Bean1     : 初始化2
    BeanInitAndDestroy$Bean1     : 初始化3
    
    BeanInitAndDestroy$Bean2     : 销毁1
    BeanInitAndDestroy$Bean2     : 销毁2
    BeanInitAndDestroy$Bean2     : 销毁3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    basic_sr介绍
    HW-初始准备
    Maven的基础知识
    express学习7-express参数中post参数的获取
    视图
    JS的事件介绍
    利用资金曲线选择策略加减仓时机
    于佳宁:人机交互是未来元宇宙发展的重要领域
    No.6软件工程之需求分析
    TLSF内存管理算法原理详解
  • 原文地址:https://blog.csdn.net/qingqingxiangyang/article/details/126751601