springboot启动前执行方法的四种方式总结

 更新时间:2022年01月10日 11:12:53   作者:一只猪啊啊  
这篇文章主要给大家介绍了关于springboot启动前执行方法的四种方式,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

第一种  @PostConstruct注解

@Configuration
public class Test1 {
    @Autowired
    private Environment environment;
    @PostConstruct
    public void test(){
        String property = environment.getProperty("aaa.bbb");
        System.out.println("test1"+property);
    }
}

第二种  实现InitializingBean接口

@Configuration
public class Test2 implements InitializingBean {
    @Autowired
    private Environment environment;
    @Override
    public void afterPropertiesSet() throws Exception {
        String property = environment.getProperty("aaa.bbb");
        System.out.println("test2"+property);
    }
}

第三种 实现BeanPostProcessor接口

@Configuration
public class Test3 implements BeanPostProcessor {
    @Autowired
    private Environment environment;
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        String property = environment.getProperty("aaa.bbb");
        System.out.println("test3"+property);
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}

第四种  在启动类run之前执行方法

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        System.out.println("test4");
        SpringApplication.run(DemoApplication.class, args);
    }
}

当然这是不可取的

他们运行的优先级是

启动类前->BeanPostProcessor->@PostConstruct->InitializingBean

值得注意的是第三种方式,他可以让实现类里的方法提前执行

同样的使用@PostConstruct的两个类

@Configuration
public class Test1 {
    @PostConstruct
    public void test(){
        System.out.println("test1");
    }
}

第一个没有实现BeanPostProcessor接口

@Configuration
public class Test3 implements BeanPostProcessor {
    @Autowired
    private Environment environment;
    @PostConstruct
    public void  test(){
        System.out.println("test3");
    }
}

第二个实现了BeanPostProcessor接口,但是没有重写他的方法

打印结果如下

可以看到同样是使用了@PostConstruct注解,但是他们的执行顺序却截然不同

BeanPostProcessor为每一个spring维护的对象调用前后做操作,具体可以参照这篇博文

www.jb51.net/article/234143.htm

知道了启动时的加载顺序,对我们做一些初始化工作有帮助。

总结

到此这篇关于springboot启动前执行方法的四种方式的文章就介绍到这了,更多相关springboot启动前执行方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Struts2的配置 struts.xml Action详解

    Struts2的配置 struts.xml Action详解

    这篇文章主要介绍了Struts2的配置 struts.xml Action详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • SpringCloud配置刷新原理解析

    SpringCloud配置刷新原理解析

    这篇文章主要介绍了SpringCloud之配置刷新的原理,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • Java实现冒泡排序算法及对其的简单优化示例

    Java实现冒泡排序算法及对其的简单优化示例

    这篇文章主要介绍了Java实现冒泡排序算法及对其的简单优化示例,冒泡排序的最差时间复杂度为O(n^2),最优时间复杂度为O(n),存在优化的余地,需要的朋友可以参考下
    2016-05-05
  • Java计算一个数加上100是完全平方数,加上168还是完全平方数

    Java计算一个数加上100是完全平方数,加上168还是完全平方数

    这篇文章主要介绍了Java计算一个数加上100是完全平方数,加上168还是完全平方数,需要的朋友可以参考下
    2017-02-02
  • Java 获取服务器环境的实例详解

    Java 获取服务器环境的实例详解

    这篇文章主要介绍了Java 获取服务器环境的实例详解的相关资料,这里提供实例和输出结果,希望能帮助大家理解,需要的朋友可以参考下
    2017-07-07
  • Java枚举学习之定义和基本特性详解

    Java枚举学习之定义和基本特性详解

    枚举是JAVA 5.0后增加的一个重要类型。可以用来表示一组取值范围固定的变量。本文将通过示例为大家详细讲解枚举的定义和基本特性,感兴趣的可以了解一下
    2022-08-08
  • JAVA module-info.java文件详解

    JAVA module-info.java文件详解

    这篇文章主要介绍了JAVA module-info.java文件详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • SpringBoot中swagger的使用

    SpringBoot中swagger的使用

    这篇文章主要介绍了SpringBoot中swagger的使用,文中有非常详细的代码示例,对正在学习swagger的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • SpringBoot实战记录之数据访问

    SpringBoot实战记录之数据访问

    对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置,下面这篇文章主要介绍了SpringBoot实战记录之数据访问,需要的朋友可以参考下
    2022-04-04
  • Java数据结构超详细分析二叉搜索树

    Java数据结构超详细分析二叉搜索树

    二叉搜索树是以一棵二叉树来组织的。每个节点是一个对象,包含的属性有left,right,p和key,其中,left指向该节点的左孩子,right指向该节点的右孩子,p指向该节点的父节点,key是它的值
    2022-03-03

最新评论