文章目录
- Spring启动时初始化的几种方式详解
- 一、引言
- 二、Spring Boot启动流程
- 1、SpringApplication的创建
- 1.1、创建SpringApplication的方式
- 2、环境和监听器的初始化
- 三、Bean的创建和初始化
- 3.1、使用@Bean注解配置
- 3.2、使用@PostConstruct注解
- 四、使用示例
- 4.1、ApplicationRunner和CommandLineRunner接口
- 五、总结
Spring启动时初始化的几种方式详解
一、引言
在Spring框架中,初始化是一个关键步骤,它涉及到配置加载、环境准备、Bean的创建和初始化等多个环节。Spring Boot作为Spring的扩展,简化了这些步骤,提供了多种初始化方式。本文将详细解析Spring启动时的几种初始化方式,并提供代码示例。
二、Spring Boot启动流程
1、SpringApplication的创建
Spring Boot应用的启动通常从一个带有@SpringBootApplication
注解的主类开始,这个注解包含了@Configuration
、@EnableAutoConfiguration
和@ComponentScan
,从而开启了自动配置和组件扫描。SpringApplication.run()
方法是用来启动Spring Boot应用的主要入口。
1.1、创建SpringApplication的方式
有三种常见的方式创建SpringApplication
:
-
直接执行静态方法run:
@SpringBootApplication public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);} }
这是最常用的方式,简单且直观。
-
通过new关键字直接创建:
@SpringBootApplication public class MyApplication {public static void main(String[] args) {SpringApplication application = new SpringApplication(MyApplication.class);application.run(args);} }
这种方式允许在运行之前对
SpringApplication
对象进行更多的配置。 -
使用SpringApplicationBuilder:
@SpringBootApplication public class MyApplication {public static void main(String[] args) {new SpringApplicationBuilder(MyApplication.class).run(args);} }
这种方式适合喜欢链式编程风格的开发者。
2、环境和监听器的初始化
在SpringApplication
的构造方法中,Spring Boot解析应用的启动模式,并初始化应用的上下文类型。同时,Spring Boot也会初始化ConfigurableEnvironment
,这个环境中包含了系统的属性、环境变量、配置文件等数据,作为后续加载Bean定义和初始化的基础。
三、Bean的创建和初始化
3.1、使用@Bean注解配置
编写配置类,使用@Configuration
和@Bean
注解进行初始化。这种方式允许在Spring容器启动时执行一些初始化操作。
@Configuration
public class InitConfigTest {@Beanpublic String testInit() {System.out.println("Initializing test bean");return "test";}
}
3.2、使用@PostConstruct注解
在Spring管理的Bean中使用@PostConstruct
注解的方法,该方法会在Spring容器实例化完Bean后被执行,用于执行一些初始化操作。
public class InitService {private List<String> data = new ArrayList<>(Arrays.asList("A", "B", "C"));@PostConstructpublic void init() {data.add("D");}public List<String> getData() {return this.data;}
}
四、使用示例
4.1、ApplicationRunner和CommandLineRunner接口
Spring Boot提供了ApplicationRunner
和CommandLineRunner
接口,允许在Spring应用启动后执行一些代码。这些接口的实现类需要用@Component
注解标注。
@Component
public class ApplicationRunnerTest implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {System.out.println("ApplicationRunner is running");}
}
@Component
public class CommandLineRunnerTest implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {System.out.println("CommandLineRunner is running");}
}
五、总结
Spring Boot提供了多种启动时初始化的方式,包括通过SpringApplication
的多种创建方式、使用@Bean
注解的配置类、@PostConstruct
注解的方法以及ApplicationRunner
和CommandLineRunner
接口。这些方式可以根据不同的初始化需求灵活选择,以确保应用在启动时能够正确加载配置和执行必要的初始化操作。
版权声明:本博客内容为原创,转载请保留原文链接及作者信息。
参考文章:
- 深入理解 Spring Boot 启动流程-CSDN博客
- Spring Boot启动时执行初始化操作的几种方式_springboot启动时初始化-CSDN博客