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
投稿

猜你喜欢

  • Java中Excel高效解析工具EasyExcel的实践

    2023-05-28 13:36:38
  • 线程池中使用spring aop事务增强

    2021-08-06 06:37:19
  • Java压缩文件工具类ZipUtil使用方法代码示例

    2022-11-26 02:21:32
  • Mybatis使用大于等于或小于等于进行比较

    2021-12-25 10:21:44
  • Android控件之SeekBar的用法总结

    2022-10-25 00:15:38
  • SpringMVC Restful api接口实现的代码

    2023-11-29 12:34:27
  • 关于c++ 智能指针及 循环引用的问题

    2023-06-22 11:18:38
  • Java流程控制之选择结构

    2021-10-24 08:12:50
  • 19款Javascript富文本网页编辑器

    2021-12-08 23:48:45
  • Spring拦截器HandlerInterceptor接口代码解析

    2022-09-05 10:51:04
  • Java Spring 事件监听详情解析

    2021-06-05 00:02:08
  • Java使用数组实现ArrayList的动态扩容的方法

    2023-03-23 11:24:39
  • Java I/O流实例之简历替换

    2022-04-23 08:55:07
  • Unity 从Resources中动态加载Sprite图片的操作

    2023-08-26 11:37:18
  • Java NIO Path接口和Files类配合操作文件的实例

    2023-10-20 09:29:01
  • 详解Android Webview加载网页时发送HTTP头信息

    2023-11-16 02:32:34
  • java 启动exe程序,传递参数和获取参数操作

    2023-09-11 04:30:47
  • 详谈java中int和Integer的区别及自动装箱和自动拆箱

    2023-01-18 23:25:20
  • Spring Boot集成Ehcache缓存解决方式

    2023-05-13 08:27:27
  • Spring Security实现自动登陆功能示例

    2023-01-29 15:31:55
  • asp之家 软件编程 m.aspxhome.com