spring探秘:通过BeanPostProcessor、@PostConstruct、InitializingBean在启动前执行方法

springboot启动前执行方法的3种方式:实现BeanPostProcessor接口、实现InitializingBean接口、使用@PostConstruct注解

示例:

第一种 实现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;
    }
}

第二种 实现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);
    }

}

第三种 使用@PostConstruct注解

@Configuration
public class Test1 {

    @Autowired
    private Environment environment;

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

}

运行的优先级是:

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

需注意:BeanPostProcessor的方式会让实现类里的方法提前执行。BeanPostProcessor为每一个spring维护的对象调用前后做操作,实现了它我们当前类就会变成一个BeanPostProcessor对象,就可以像BeanPostProcessor一样在容器加载最初的几个阶段被实例化,只要被实例化,PostConstruct注解的标注的方法就会立即执行。

参考:https://www.jianshu.com/p/1845fe64decd
https://www.jianshu.com/p/1417eefd2ab1

原文地址:https://www.cnblogs.com/feng-gamer/p/12001205.html

时间: 2024-10-12 17:25:35

spring探秘:通过BeanPostProcessor、@PostConstruct、InitializingBean在启动前执行方法的相关文章

Spring注解之BeanPostProcessor与InitializingBean

/*** BeanPostProcessor 为每个bean实例化时提供个性化的修改,做些包装等*/ package org.springframework.beans.factory.config; import org.springframework.beans.BeansException; public interface BeanPostProcessor { /** * 在bean实例化前调用*/ Object postProcessBeforeInitialization(Obje

spring在web容器启动时执行初始化方法

需求:在tomcat启动时开启一个定时任务. 想法:容器启动时执行方法,最容易想到的就是servlet中可以配置load-on-startup,设置一个正整数也就可以随容器一起启动. 问题:上面的方法很好,但是由于定时任务需要去操作数据库,而项目采用了spring的依赖注入来管理对象,而servlet并不受Spring的管理.若此时在servlet中注入Spring管理的对象,则会报错:javax.naming.NameNotFoundException: Name com.test.InitS

在 ASP.NET Core 程序启动前运行你的代码

原文:在 ASP.NET Core 程序启动前运行你的代码 一.前言# 在进行 Web 项目开发的过程中,可能会存在一些需要经常访问的静态数据,针对这种在程序运行过程中可能几乎不会发生变化的数据,我们可以尝试在程序运行前写入到缓存中,这样在系统后续使用时就可以直接从缓存中进行获取,从而减缓因为频繁读取这些静态数据造成的应用数据库服务器的巨大承载压力. 既然需要在程序运行前将静态数据写入到缓存中,毫无疑问我们需要在程序运行前执行一些自定义功能的代码,那么在本章中,我将会介绍如何在 ASP.NET

Spring Bean Life Cycle Methods – InitializingBean, DisposableBean, @PostConstruct, @PreDestroy and *Aware interfaces

Spring Beans are the most important part of any Spring application. Spring ApplicationContext is responsible to initialize the Spring Beans defined in spring bean configuration file. Spring Context is also responsible for injection dependencies in th

一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式

前言 有时候我们需要在应用启动时执行一些代码片段,这些片段可能是仅仅是为了记录 log,也可能是在启动时检查与安装证书 ,诸如上述业务要求我们可能会经常碰到 Spring Boot 提供了至少 5 种方式用于在应用启动时执行代码.我们应该如何选择?本文将会逐步解释与分析这几种不同方式 CommandLineRunner CommandLineRunner 是一个接口,通过实现它,我们可以在 Spring 应用成功启动之后 执行一些代码片段 @Slf4j @Component @Order(2)

spring boot 配置启动后执行sql, 中文乱码

spring.datasource.schema指定启动后执行的sql文件位置. 我发现中文乱码,原因是没有指定执行sql script encoding: spring: datasource: url: "jdbc:h2:mem:test" username: "sa" password: "" schema: database/import.sql sql-script-encoding: utf-8 type: com.alibaba.d

web项目启动执行方法

近期在项目中需要将用户在web启动时就查询出来,当作缓存使用. 一.首先需要实现 ServletContextListener 接口 1 public class UserCacheUtils implements ServletContextListener { 2 3 /** 4 * web服务器启动时执行 5 */ 6 @Override 7 public void contextInitialized(ServletContextEvent sce) { 8 System.out.pri

Servlet中的init()方法如何才会在服务器启动时执行

如果要想让 servlet 的 init () 方法在服务器启动 时就被执行,则需要在 web.xml 中相应的 servlet 下配置 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.

使用MBROSTool 工具制作U盘多启动盘的方法总结

前段时间写了一个自用五合一多启动盘分享--分别用来维护娱乐,wifi密码破解,win&mac登陆密码绕过/清除,反馈的同学还是挺多,觉得大家都有这方面的需求,于是再把自己的使用经验总结一下. 软件的原贴地址:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=330493&extra=page%3D1.希望大家多给M大提供宝贵意见和建议.软件更新了很多版本,不同版本的功能都根据需要进行过增删. 下面就来单独说说使用MBROSTool