Spring Framework 5 aparentemente contiene soporte para un "índice de componentes" que vive en META-INF / spring.components y se puede usar para evitar la necesidad de escanear class-path y, por lo tanto, supongo, mejorar el tiempo de inicio de una aplicación web.

Ver:

¿Cómo puedo crear un índice de componentes de este tipo para una aplicación web existente que planeo actualizar a Spring 5?

(Lo ideal sería que se generara automáticamente en el momento de la compilación con Maven, imagino, pero cualquier otro enfoque viable al menos me daría un punto de partida para trabajar)

17
Matt Sheppard 13 nov. 2017 a las 01:52

2 respuestas

La mejor respuesta

Spring 5 Se ha agregado una nueva función para mejorar el rendimiento de inicio de aplicaciones grandes.

crea una lista de componentes candidatos en el momento de la compilación.

En este modo, todos los módulos de la aplicación deben usar este mecanismo ya que, cuando ApplicationContext detecta dicho índice, lo usará automáticamente en lugar de escanear la ruta de clases.

Para generar el índice, solo necesitamos agregar la siguiente dependencia a cada módulo

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")
}

Este proceso generará un archivo META-INF / spring.components que se incluirá en el archivo jar.

Referencia: 1.10.9. Generación de un índice de componentes candidatos

14
Konstantin Pelepelin 5 may. 2018 a las 19:19

Los archivos META-INF/spring.components son generados por una biblioteca de procesador de anotaciones llamada spring-context-indexer. Si agrega esta biblioteca como "ruta del procesador de anotaciones" al complemento del compilador maven, los archivos se generarán automáticamente en el momento de la compilación:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <annotationProcessorPaths>
      <path>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-indexer</artifactId>
        <version>5.0.6.RELEASE</version>
      </path>
    </annotationProcessorPaths>
    ...
  </configuration>
</plugin>

Esta configuración requiere maven-compiler-plugin versión 3.5 o superior.

Consulte también: https://maven.apache.org /plugins/maven-compiler-plugin/compile-mojo.html#annotationProcessorPaths

7
Manos Nikolaidis 21 mar. 2019 a las 15:47