使用@PostConstruct注解

@PostConstruct注解可以用于在Spring容器初始化bean之后立即执行特定方法

import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
​
@Component
public class MyInitializer {
    
    @PostConstruct
    public void init() {
        // 初始化工作
        System.out.println("初始化工作完成");
    }
}
​

实现Application Runner接口

ApplicationRunner接口提供了一种在Spring Boot应用启动后执行特定代码的方式

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
​
@Component
public class MyApplicationRunner implements ApplicationRunner {
​
    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 初始化工作
        System.out.println("初始化工作完成");
    }
}
​

实现Command Line Runner接口

CommandLineRunner接口类似于ApplicationRunner,可以在应用启动之后执行特定代码

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
​
@Component
public class MyCommandLineRunner implements CommandLineRunner {
​
    @Override
    public void run(String... args) throws Exception {
        // 初始化工作
        System.out.println("初始化工作完成");
    }
}
​

使用@Event Listener注解监听ApplicationReadyEvent

通过监听ApplicationReadyEvent事件,可以在Spring Boot应用完全启动并准备好服务请求时执行初始化工作

import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.springframework.boot.context.event.ApplicationReadyEvent;
​
@Component
public class MyApplicationReadyListener {
​
    @EventListener(ApplicationReadyEvent.class)
    public void onApplicationReady() {
        // 初始化工作
        System.out.println("初始化工作完成");
    }
}
​

使用SmartInitializingSingleton接口

SmartInitializingSingleton接口提供了一种在所有单例bean初始化完成后执行代码的方式

import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.stereotype.Component;
​
@Component
public class MySmartInitializingSingleton implements SmartInitializingSingleton {
​
    @Override
    public void afterSingletonsInstantiated() {
        // 初始化工作
        System.out.println("初始化工作完成");
    }
}
​

使用SPring Boot的InitializingBean接口

通过实现InitializingBean接口的afterPropertiesSet方法,可以在bean的属性设置完成后执行初始化工作

import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
​
@Component
public class MyInitializingBean implements InitializingBean {
​
    @Override
    public void afterPropertiesSet() throws Exception {
        // 初始化工作
        System.out.println("初始化工作完成");
    }
}
​

总结

  • @PostConstruct:适合简单的初始化逻辑,执行时机较早
  • ApplicationRunner 和 CommandLineRunner:适合需要访问命令行参数的初始化逻辑,执行时机在 Spring Boot 应用启动完成后
  • ApplicationReadyEvent 监听器:适合在整个应用准备好后执行的初始化逻辑
  • SmartInitializingSingleton:适合需要在所有单例 bean 初始化完成后执行的初始化逻辑
  • InitializingBean:适合需要在 bean 属性设置完成后执行的初始化逻辑
最后修改:2025 年 04 月 23 日
如果觉得我的文章对你有用,请随意赞赏