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

作者:Dongguabai 时间:2022-05-02 10:50:40 

使用@Indexed加快启动速度

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

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

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

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

会生成spring.compoments文件:

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

跟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 对象,从而达到提升性能的目的。

来源:https://dongguabai.blog.csdn.net/article/details/83961406

标签:Spring,@Indexed,启动
0
投稿

猜你喜欢

  • AndroidStudio接入Unity工程并实现相互跳转的示例代码

    2023-08-06 23:34:51
  • Java探索之Thread+IO文件的加密解密代码实例

    2023-01-26 19:07:03
  • JAVA通过Filter实现允许服务跨域请求的方法

    2022-08-02 02:17:46
  • Android如何让WebView中的HTML5页面实现视频全屏播放

    2023-07-29 00:32:06
  • 避免sql注入_动力节点Java学院整理

    2023-08-21 17:39:12
  • Java 单例模式的实现资料整理

    2022-05-29 21:27:33
  • @ConfigurationProperties加载外部配置方式

    2023-11-09 01:14:32
  • Android中bindService基本使用方法概述

    2023-08-05 19:18:56
  • 用Flutter开发自定义Plugin的方法示例

    2023-07-05 00:19:40
  • JWT在OpenFeign调用中进行令牌中继详解

    2023-02-07 04:19:15
  • Spring Boot Thymeleaf实现国际化的方法详解

    2023-11-24 06:01:01
  • Android RecyclerView基本使用详解

    2023-07-24 21:13:30
  • Spring常用注解汇总

    2022-12-19 16:26:03
  • 详解通过JDBC进行简单的增删改查(以MySQL为例)

    2023-08-14 20:16:40
  • SpringBoot中@Import注解如何正确使用

    2023-07-28 12:36:16
  • Spring Boot使用Allatori代码混淆的方法

    2023-11-24 16:34:55
  • Android Studio 多层级 Module 对 aar 引用问题解决方法

    2023-08-06 19:41:27
  • Java SE求解汉诺塔问题的示例代码

    2022-05-10 23:44:30
  • 解决Spring Cloud feign GET请求无法用实体传参的问题

    2023-11-17 14:14:05
  • Android Flutter中Offstage组件的使用教程详解

    2023-08-20 01:01:44
  • asp之家 软件编程 m.aspxhome.com