返回

多管齐下!SpringBoot 启动时自动执行代码的几种方式,手把手教你快速掌握

后端







## 前言

SpringBoot项目在启动时经常需要预加载一些资源。本文将介绍Java自身的启动时加载方式和Spring启动时加载方式,并提供代码测试示例,帮助你快速掌握SpringBoot启动时自动执行代码的技巧。

## Java自身的启动时加载方式

Java虚拟机(JVM)提供了两种启动时加载方式:

- **静态加载:**  在类加载器加载类时,会自动加载静态变量和静态代码块。
- **动态加载:**  在运行时使用反射或其他方式加载类。

下面是一个Java自身的启动时加载方式示例:

```java
public class Test {

    // 静态变量
    private static int num = 10;

    // 静态代码块
    static {
        System.out.println("静态代码块执行了");
    }

    public static void main(String[] args) {
        // 动态加载类
        try {
            Class.forName("Test");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

运行以上代码,可以看到输出结果为:

静态代码块执行了

这表明静态代码块在类加载时被执行了。

Spring启动时加载方式

Spring提供了多种启动时加载方式,包括:

  • @PostConstruct注解: 在类或方法上使用@PostConstruct注解,表示该类或方法在bean初始化后执行。
  • InitializingBean接口: 实现InitializingBean接口,并重写afterPropertiesSet方法,表示在bean初始化后执行。
  • BeanPostProcessor接口: 实现BeanPostProcessor接口,并重写postProcessBeforeInitialization和postProcessAfterInitialization方法,表示在bean初始化前后执行。

下面是一个Spring启动时加载方式示例:

@Component
public class Test implements InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingBean接口执行了");
    }

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Test.class);
    }
}

运行以上代码,可以看到输出结果为:

InitializingBean接口执行了

这表明InitializingBean接口的afterPropertiesSet方法在bean初始化后被执行了。

代码测试

为了验证Java自身的启动时加载方式和Spring启动时加载方式,我们编写了一个简单的SpringBoot项目,并在项目的main方法中打印输出结果。

@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
        System.out.println("main方法执行了");
    }
}

运行以上代码,可以看到输出结果为:

静态代码块执行了
InitializingBean接口执行了
main方法执行了

这表明Java自身的启动时加载方式和Spring启动时加载方式都得到了验证。

总结

本文介绍了Java自身的启动时加载方式和Spring启动时加载方式,并提供代码测试示例。希望本文能够帮助你快速掌握SpringBoot启动时自动执行代码的技巧。