我的信念是Spring bootstraps
由于指示
<context:component-scan base-package=" ..... " />
将在应用程序启动时(或在任何指示时)在运行时执行组件扫描。
有没有办法指导编译器(可能是一个maven构建插件)在构建/编译期间对带注释的spring组件执行一次静态扫描,这样就不会执行bootstrap组件扫描,而不会放弃使用组件注释?
作为减少启动负载和延迟的方法。
答案 0 :(得分:3)
Spring 5 添加了一项新功能,以提高大型应用程序的启动性能。
它会在编译时创建一个候选组件列表。
在此模式下,应用程序的所有模块都必须使用此机制,因为当ApplicationContext检测到此类索引时,它将自动使用它而不是扫描类路径。
要生成索引,我们只需要在每个模块中添加以下依赖项
Maven:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-indexer</artifactId>
<version>5.0.3.RELEASE</version>
<optional>true</optional>
</dependency>
</dependencies>
Gradle
dependencies {
compileOnly("org.springframework:spring-context-indexer:5.0.3.RELEASE")
}
此过程将生成一个 META-INF / spring.components 文件,该文件将包含在jar中。
答案 1 :(得分:1)
Spring 5添加了generating an index of candidate components at compile time选项。找到索引后,仅使用索引并跳过完整的类路径扫描。