使用场景
在应用中有大量使用@ComponentScan
扫描的package包含的类越多的时候,Spring模式注解解析耗时就越长。
使用方法
在项目中使用的时候需要导入一个spring-context-indexer
jar
<dependency><groupId>org.springframework</groupId><artifactId>spring-context-indexer</artifactId><version>5.1.12.RELEASE</version><optional>true</optional></dependency>
然后在代码中,对于使用了模式注解的类上加上@Indexed
注解即可。如下:
使用maven打包后
原理
简单说明一下:在项目中使用了@Indexed之后,编译打包的时候会在项目中自动生成META-INT/spring.components文件。
当Spring应用上下文执行ComponentScan扫描时,META-INT/spring.components将会被CandidateComponentsIndexLoader 读取并加载,转换为CandidateComponentsIndex对象,这样的话@ComponentScan不在扫描指定的package,而是读取CandidateComponentsIndex对象,从而达到提升性能的目的。