• 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
  • 相关阅读:
    个人做量化交易一定不靠谱?
    Centos8安装docker及常用命令总结
    【高等数学】弧微分、渐近线、曲率和曲率半径
    Windows系统管理一:操作系统概述
    中间件 | Kafka - [基本信息]
    在uniapp中使用 秋云ucharts图表,运行到小程序
    重庆思庄技术分享——Bug 12861117 RMAN 会话旋转
    CF464E The Classic Problem
    OceanBase获奖!蚂蚁集团第三次入选世界互联网领先科技成果
    从ifelse到策略模式,谈谈我对设计模式的理解
  • 原文地址:https://blog.csdn.net/qingqingxiangyang/article/details/126751601