Spring组件注释编译时扫描

时间:2014-09-22 18:50:37

标签: java spring spring-mvc startup

我的信念是Spring bootstraps

  • 的ContextLoaderListener
  • DispatcherServlet的

由于指示

<context:component-scan base-package=" ..... " />

将在应用程序启动时(或在任何指示时)在运行时执行组件扫描。

有没有办法指导编译器(可能是一个maven构建插件)在构建/编译期间对带注释的spring组件执行一次静态扫描,这样就不会执行bootstrap组件扫描,而不会放弃使用组件注释?

作为减少启动负载和延迟的方法。

2 个答案:

答案 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.10.9. Generating an index of candidate components

答案 1 :(得分:1)

Spring 5添加了generating an index of candidate components at compile time选项。找到索引后,仅使用索引并跳过完整的类路径扫描。