zoukankan      html  css  js  c++  java
  • Bean初始化操作initMethod、@PostConstruct和InitializingBean

    我最新最全的文章都在 南瓜慢说 www.pkslow.com ,欢迎大家来喝茶!

    1 简介

    很多时间当一个Bean被创建出来后,我们希望做一些初始化操作,如初始化数据、缓存预热等。有以下三种方法:

    • 初始化方法initMethod
    • 注解@PostConstruct
    • InitializingBeanafterPropertiesSet方法

    2 三种方法实现

    先准备一个类用于测试,代码如下:

    public class BeanLifeCheck implements InitializingBean {
        private static final Logger logger = LoggerFactory.getLogger(BeanLifeCheck.class);
    
        @Value("${spring.application.name}")
        private String applicationName;
    
        public BeanLifeCheck() {
            logger.info("BeanLifeCheck: Construct " + applicationName);
        }
    
        public void initMethod() {
            logger.info("BeanLifeCheck: initMethod " + applicationName);
        }
    
        @PostConstruct
        public void postConstruct() {
            logger.info("BeanLifeCheck: postConstruct " + applicationName);
        }
    
        @PreDestroy
        public void preDestroy() {
            logger.info("BeanLifeCheck: preDestroy " + applicationName);
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            logger.info("BeanLifeCheck: afterPropertiesSet " + applicationName);
        }
    }
    

    2.1 初始化方法initMethod

    这个以前是通过xml配置文件来定义的,现在可以直接定义在@Bean注解上,如下:

    @Bean(initMethod = "initMethod")
    public BeanLifeCheck beanLifeCheck() {
      return new BeanLifeCheck();
    }
    

    2.2 注解@PostConstruct

    直接在方法上加注解即可:

    @PostConstruct
    public void postConstruct() {
      logger.info("BeanLifeCheck: postConstruct " + applicationName);
    }
    

    2.3 InitializingBean的afterPropertiesSet方法

    需要类实现接口InitializingBean,如下:

    @Override
    public void afterPropertiesSet() throws Exception {
      logger.info("BeanLifeCheck: afterPropertiesSet " + applicationName);
    }
    

    3 总结

    运行后的执行日志及顺序如下:

    2021-02-06 17:44:52.377: BeanLifeCheck: Construct null
    2021-02-06 17:44:52.379: BeanLifeCheck: postConstruct Springboot-Common
    2021-02-06 17:44:52.379: BeanLifeCheck: afterPropertiesSet Springboot-Common
    2021-02-06 17:44:52.379: BeanLifeCheck: initMethod Springboot-Common
    2021-02-06 17:45:10.347: BeanLifeCheck: preDestroy Springboot-Common
    

    三种方法感觉区别不大,用哪个就看习惯了。

    代码请查看:https://github.com/LarryDpk/pkslow-samples


    欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

    多读书,多分享;多写作,多整理。

  • 相关阅读:
    3.默认参数的注意事项
    2.关键字global,nonlocal
    1.函数的结构,调用,传参,形参,实参,args,kwargs,名称空间,高阶函数
    19. 实现一个整数加法计算器(多个数相加):
    20.文件操作
    18.使用for循环计算+1-3+5-7+9-11+13...99的结果
    ubuntu docker更新镜像源
    虚拟环境的使用
    前端基础之HTML
    jQuery基本使用
  • 原文地址:https://www.cnblogs.com/larrydpk/p/14942498.html
Copyright © 2011-2022 走看看