目录
一、静态代码块
二、构造方法
三、@PostConstruct
四、InitializingBean 接口
五、 @Bean 注解中的 initMethod
六、 CommandLineRunner 接口
七、ApplicationRunner 接口
八、@EventListener事件
九、SmartInitializingSingleton接口
十、ApplicationListener接口
在 Spring Boot 项目中,步调启动后需要做一些初始化的操作,如需要将一些原始数据写入缓存、大概一些资源的加载等。
一、静态代码块
当我们将某个类交给Spring管理的时候,静态代码块是优先实行的,此时可以在代码块中做一些初始化操作,这个无需过多解释。
- @Component
- @Slf4j
- public class TestDemo {
- @Value("${netty.port}")
- private Integer nettyPort;
- static {
- log.info("静态代码块执行======");
- }
- }
复制代码 二、构造方法
构造方法是静态代码块之后实行的,这种方式也无需过多解释。
- @Component
- @Slf4j
- public class TestDemo {
- @Value("${netty.port}")
- private Integer nettyPort;
- public TestDemo(){
- log.info("构造方法执行======配置文件读取:{}", nettyPort);
- }
- static {
- log.info("静态代码块执行======");
- }
- }
复制代码 三、@PostConstruct
@PostConstruct 注解,它标记的方法会在依赖注入完成后立刻被调用。它实用于简朴的初始化逻辑,实行次序较早。
- @Component
- @Slf4j
- public class MyPostConstructBean {
- @Value("${netty.port}")
- private Integer nettyPort;
- @PostConstruct
- public void init() {
- log.info("PostConstruct执行======配置文件读取:{}", nettyPort);
- }
- }
复制代码 四、InitializingBean 接口
实现 InitializingBean 接口并重写 afterPropertiesSet 方法,它比 @PostConstruct 更具可读性,适合复杂的初始化逻辑。它也是在依赖注入完成后调用,实行次序与比@PostConstruct 要早一些。
- @Component
- @Slf4j
- public class MyInitializingBean implements InitializingBean {
- @Value("${netty.port}")
- private Integer nettyPort;
- @Override
- public void afterPropertiesSet() {
- log.info("InitializingBean接口的afterProperiesSet执行======配置文件读取:{}", nettyPort);
- }
- }
复制代码 五、 @Bean 注解中的 initMethod
@Configuration 设置类中的 @Bean 注解,可以指定 initMethod 属性来定义初始化方法。需要指定初始化方法,它在 @PostConstruct 和 InitializingBean 之后实行。
- @Configuration
- @Slf4j
- public class MyInitMethod {
- @Value("${netty.port}")
- private Integer nettyPort;
- @Bean(initMethod = "init")
- public MyTestBean myBean() {
- return new MyTestBean();
- }
- class MyTestBean {
- public void init() {
- log.info("@Bean的initMethod方法执行 ==== 配置文件读取:{}", nettyPort);
- }
- }
- }
复制代码 六、 CommandLineRunner 接口
实现 CommandLineRunner 接口的类会在 SpringBoot 应用启动完成后实行。它可以吸收启动参数。
- @Component
- @Slf4j
- public class MyCommandLineRunner implements CommandLineRunner {
- @Value("${netty.port}")
- private Integer nettyPort;
- @Override
- public void run(String... args) {
- log.info("CommandLineRunner接口的run方法执行======配置文件读取:{}", nettyPort);
- }
- }
复制代码 七、ApplicationRunner 接口
与 CommandLineRunner 类似。
- @Component
- @Slf4j
- public class MyApplicationRunner implements ApplicationRunner {
- @Value("${netty.port}")
- private Integer nettyPort;
- @Override
- public void run(ApplicationArguments args) {
- log.info("ApplicationRunner接口的run方法执行======配置文件读取:{}", nettyPort);
- }
- }
复制代码 八、@EventListener事件
@EventListener 注解,可以在应用启动的某个生命周期阶段实行初始化逻辑。比如监听 ContextRefreshedEvent 事件。它实用于需要在特定生命周期事件发生时实行的初始化逻辑,可以监听各种生命周期事件。
- @Component
- @Slf4j
- public class MyContextRefreshedListener {
- @Value("${netty.port}")
- private Integer nettyPort;
- @EventListener
- public void handleContextRefreshed(ContextRefreshedEvent event) {
- log.info("@EventListener监听ContextRefreshedEvent事件执行======配置文件读取:{}", nettyPort);
- }
- }
复制代码 九、SmartInitializingSingleton接口
实现 SmartInitializingSingleton 接口的 afterSingletonsInstantiated 方法,在全部单例 bean 都初始化完成后实行。
- @Component
- @Slf4j
- public class MySmartInitializingSingleton implements SmartInitializingSingleton {
- @Value("${netty.port}")
- private Integer nettyPort;
- @Override
- public void afterSingletonsInstantiated() {
- log.info("SmartInitializingSingleton接口的afterSingletonsInstantiated方法执行======配置文件读取:{}", nettyPort);
- }
- }
复制代码 十、ApplicationListener接口
实现 ApplicationListener 接口,可以监听特定的 Spring 事件,如 ApplicationReadyEvent,用于在应用完全启动后实行逻辑。监听各种 Spring 事件,提供灵活的初始化时机。
- @Component
- @Slf4j
- public class MyApplicationReadyListener implements ApplicationListener<ApplicationReadyEvent> {
- @Value("${netty.port}")
- private Integer nettyPort;
- @Override
- public void onApplicationEvent(ApplicationReadyEvent event) {
- log.info("监听ApplicationReadyEvent事件,ApplicationListener接口的onApplicationEvent方法执行======配置文件读取:{}", nettyPort);
- }
- }
复制代码 十一、实行次序
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |