返回
多管齐下!SpringBoot 启动时自动执行代码的几种方式,手把手教你快速掌握
后端
2023-12-13 14:08:11
## 前言
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启动时自动执行代码的技巧。