Spring如何使用@Indexed加快启动速度

 更新时间:2021年11月09日 08:38:20   作者:Dongguabai  
这篇文章主要介绍了Spring如何使用@Indexed加快启动速度,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用@Indexed加快启动速度

Spring读取@Component组件(派生性),有两种实现方式,一种是反射,一种是ASM。反射性能低主要是要loadClass,毕竟Class,需要Load,比如扫描”com.dongguabai”需要把所有的类load,效率太慢。

ASM相当于直接加载类的资源信息,ReadResource。

Spring5.0 后面又有了@Indexed,可以预编译。

会生成spring.compoments文件:

跟lombok一样在编译期处理。

Spring5--@Indexed注解

Spring Framework 5.0作为 Spring Boot 2.0 的底层核心框架,就目前已经发布的版本来看,相对于 Spring Framework 4.x 而言,注解驱动的性能提升不是那么明显。

然而随着 Spring Framework 注解驱动能能力逐渐受到开发人员的关注,尤其在 Spring Boot 应用场景中,大量使用注解 @CompoentScan 扫描指定的 package,当扫描的 package 所包含的类越多时,Spring 模式注解解析的耗时就越长。

对于这个问题,Spring Framework 5.0 版本引入的注解 @Indexed,为 Spring 模式注解添加索引,以提升应用启动性能。

举个栗子

@Indexed
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {}

但是,注解 @Indexed 不能孤立地存在,需要在工程 pom.xml 中增加 org.springframework:spring-context-indexer 依赖:

<dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context-indexer</artifactId>
       <optional>true</optional>
</dependency>

当工程打包为 JAR 或在 IDE 工具中重新构建后,METE-INF/spring.components 文件将自动生成。

换言之,该文件在编译时生成。当 Spring 应用上下文执行 @CompoentScan 扫描时,METE-INF/spring.components 将被 CandidateComponentsIndexLoader 读取并加载,转化为 CandidateComponentsIndex 对象,进而 @CompoentScan 不再扫描指定的 package,而是读取 CandidateComponentsIndex 对象,从而达到提升性能的目的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot自动重启的简单方法

    springboot自动重启的简单方法

    Springboot提供了热部署的方式,当发现任何类发生了改变,马上通过JVM类加载的方式,加载最新的类到虚拟机中。这篇文章主要介绍了springboot自动重启的实现方法,需要的朋友可以参考下
    2018-04-04
  • Java内存结构和数据类型

    Java内存结构和数据类型

    本文重点给大家介绍java内存结构和数据类型知识,非常不错,具有参考借鉴价值,需要的朋友参考下
    2016-12-12
  • 基于SpringBoot的Dubbo泛化调用的实现代码

    基于SpringBoot的Dubbo泛化调用的实现代码

    这篇文章主要介绍了基于SpringBoot的Dubbo泛化调用的实现,从泛化调用实现的过程来看,我们可以对自己提供所有服务进行测试,不需要引入调用的接口,减少代码的侵入,需要的朋友可以参考下
    2022-04-04
  • Java中关于优先队列PriorityQueue的使用及相关方法

    Java中关于优先队列PriorityQueue的使用及相关方法

    这篇文章主要介绍了Java中关于优先队列PriorityQueue的使用及相关方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Java中StringBuilder常用构造方法解析

    Java中StringBuilder常用构造方法解析

    这篇文章主要介绍了Java中StringBuilder常用构造方法解析,StringBuilder是一个可标的字符串类,我们可以吧它看成是一个容器这里的可变指的是StringBuilder对象中的内容是可变的,需要的朋友可以参考下
    2024-01-01
  • Mybatis Plus 代码生成器的实现

    Mybatis Plus 代码生成器的实现

    这篇文章主要介绍了Mybatis Plus 代码生成器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • SpringBoot中Mybatis注解一对多和多对多查询实现示例

    SpringBoot中Mybatis注解一对多和多对多查询实现示例

    这篇文章主要介绍了SpringBoot中Mybatis注解一对多和多对多查询的实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • 详解mybatis插入数据后返回自增主键ID的问题

    详解mybatis插入数据后返回自增主键ID的问题

    这篇文章主要介绍了mybatis插入数据后返回自增主键ID详解,本文通过场景分析示例代码相结合给大家介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • Mybatis表的关联查询详情

    Mybatis表的关联查询详情

    这篇文章主要介绍了Mybatis表的关联查询详情,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Java使用正则表达式检索、替换String中特定字符和正则表达式的一切

    Java使用正则表达式检索、替换String中特定字符和正则表达式的一切

    这篇文章主要给大家介绍了关于Java使用正则表达式检索、替换String中特定字符和正则表达式的一切,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论