@Indexed注解
作用:
在SpringFramework5.0引入了一个注解@Indexed
,它可以为Spring的模式注解1添加索引,以提升应用启动性能。
使用场景:
在应用中有大量使用@ComponentScan
扫描的package包含的类越多的时候,Spring模式注解解析耗时就越长。
原理说明:
在项目中使用了@Indexed
之后,编译打包的时候会在项目中自动生成META-INT/spring.components
文件。
当Spring应用上下文执行ComponentScan
扫描时,META-INT/spring.components
将会被CandidateComponentsIndexLoader
读取并加载,转换为CandidateComponentsIndex
对象,这样的话@ComponentScan
不在扫描指定的package,而是读取CandidateComponentsIndex
对象,从而达到提升性能的目的。
使用需注意点:
虽然这个@Indexed
注解能提升性能,但是在使用的时候也需要注意一一下。
假设Spring应用中存在一个包含META-INT/spring.components
资源的a.jar,但b.jar仅存在模式注解,那么使用@ComponentScan
扫描这两个JAR中的package时,b.jar 中的模式注解不会被识别。
补充:
META-INF文件夹的作用:
meta-inf文件夹相当于一个信息包,目录中的文件和目录获得Java 2平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务。其中的 MANIFEST.MF文件,在用jar打包时自动生成。上述的META-INT/spring.components
就是它的作用的一个体现。
jar包:
JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。JAR 文件非常类似 ZIP 文件——准确的说,它就是 ZIP 文件,所以叫它文件包。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。
- @Repository 数据仓库模式注解,@Component 通用组件模式注解,@Service 服务模式注解,@ControllerWeb 控制器模式注解,@Configuration 配置类模式注解 ↩