1. 延迟初始化以spring官方文档为基础,官方地址:Spring Boot
目前官方正式版本最新为:2.5.3(这个学习笔记系列基本是以翻译为主,不用浪费时间期望获取更多。更多是给自己看官方文档做的的一个笔记)
当前篇的内容:介绍官方文档2.5.3的第七章之SpringApplication特性
SpringApplication允许应用延迟初始化。延迟初始化的bean会在需要时创建,而不是应用启动时。这样会减少应用启动时间。在 Web 应用程序中,启用延迟初始化将导致许多与 Web 相关的 bean 在收到 HTTP 请求之前不会被初始化。
延迟初始化的缺点:
(1)会延迟发现应用程序的问题。如果错误配置的 bean 被延迟初始化,则启动期间将不再发生故障,并且只有在初始化 bean 时问题才会显现。
(2)必须确保 JVM 有足够的内存来容纳所有应用程序的 bean,而不仅仅是那些在启动期间初始化的 bean。
由于这些原因,默认情况下不启用延迟初始化,建议在启用延迟初始化之前对 JVM 的堆大小进行微调。
延迟初始化实现方式:
(1)编程式:SpringApplicationBuilder的lazyInitialization方法/SpringApplication的setLazyInitialization方法
(2)配置文件中属性配置:spring.main.lazy-initialization=true
2. Web环境的“推断算法”--WebApplicationType
(1)如果项目中存在Spring MVC,则使用AnnotationConfigServletWebServerApplicationContext
(2)如果Spring MVC 不存在而Spring WebFlux存在,则使用AnnotationConfigReactiveWebServerApplicationContext
(3)否则使用AnnotationConfigApplicationContext
3. Application Events and Listeners-事件/监听器
如果有些事件实际上是在ApplicationContext创建之前触发的,因此不能将这些事件注册为@Bean。
但是可以使用SpringApplication.addListeners(…)方法或SpringApplicationBuilder.listeners(…)方法注册它们。
如果希望无论应用是否创建,都想注册某些监听器。可以增加meta-INF/spring.factories文件。增加配置:org.springframework.context.ApplicationListener=com.example.project.MyLi
Stener
另,SpringApplicationEvents包括:
如果需要在SpringApplication启动后,运行点什么代码,可以选择实现ApplicationRunner或CommandLineRunner接口。
如果实现的接口需要有序执行,可以再另外实现org.springframework.core.Ordered接口,或者使用注解org.springframework.core.annotation.Order
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
@Order(1)
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
// Do something...
System.out.println("hhhhhhhhhhhhhhhhhhhhhh");
}
}



