Spring之spring-context-indexer依赖详解

作者:王哲晓 时间:2023-11-23 12:21:41 

Spring spring-context-indexer依赖


<dependencies>
   <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context-indexer</artifactId>
       <version>5.2.0.RELEASE</version>
       <optional>true</optional>
   </dependency>
</dependencies>

虽然类路径扫描非常快,但是Spring内部存在大量的类,添加此依赖,可以通过在编译时创建候选对象的静态列表来提高大型应用程序的启动性能。

在此模式下,作为组件扫描目标的所有模块都必须使用此机制。

配置springboot启动时自动打开浏览器 spring-context-indexer原理


int port = 8080;
String portPrefix = "--server.port=";
for (String arg : args) {
   if (arg.startsWith(portPrefix)) {
       port = Integer.parseInt(arg.substring(portPrefix.length()));
   }
}
SpringApplication.run(AppRegisterApplication.class, args);
try {
   Runtime.getRuntime().exec("cmd /c start http://localhost:" + port);
} catch (IOException e) {
   e.printStackTrace();
}

现在使用的springboot 项目大了, 每次启动都非常的慢, 所有有了以下的依赖, 加速启动:

spring-context-indexer

说明

1.虽然类路径扫描非常快,但是Spring内部存在大量的类,添加此依赖,可以通过在编译时创建候选对象的静态列表来提高大型应用程序的启动性能。

2.但是在此模式下,作为组件扫描目标的所有模块都必须使用此机制。才可以。

3.需要spring5以上才能使用,亲测有效, 依赖如下:


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

然后再你的启动类上加上一个注解: @Indexed ,用来表示, 你开启了索引, 会加速项目的启动速度.

原理说明:

先看官方的解释:

Spring之spring-context-indexer依赖详解

在项目中使用了@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 中的模式注解不会被识别。

请务必注意这样的问题。

来源:https://blog.csdn.net/qushaming/article/details/102615633

标签:Spring,spring-context-indexer,依赖
0
投稿

猜你喜欢

  • c# rsa加密解密详解

    2023-06-11 00:54:17
  • Kotlin基础学习之Deprecated与Suppress注解使用

    2023-01-03 10:50:54
  • C#基础入门之值类型和引用类型的区别详析

    2022-02-22 00:14:04
  • 关于springcloud集成nacos遇到的问题

    2022-02-27 17:41:46
  • 使用java生成字母验证码

    2021-10-29 23:50:25
  • SpringBoot-Admin实现微服务监控+健康检查+钉钉告警

    2021-12-23 02:40:22
  • java处理按钮点击事件的方法

    2021-08-24 16:28:10
  • SpringBoot整合Redis将对象写入redis的实现

    2023-07-30 14:39:07
  • Android使用SlidingPaneLayout 实现仿微信的滑动返回

    2023-08-29 04:48:21
  • C#中跨线程访问控件问题解决方案分享

    2021-06-27 18:47:24
  • C#中的yield关键字详解

    2023-01-11 08:19:01
  • java使用jaxb操作xml示例

    2023-11-05 15:02:18
  • 详解JDK自带javap命令反编译class文件和Jad反编译class文件(推荐使用jad)

    2021-12-24 00:29:29
  • Java实现抢红包功能

    2021-08-05 07:47:58
  • @RequestBody,@RequestParam和@Param的区别说明

    2023-07-20 06:29:03
  • Spring security登录过程逻辑详解

    2022-09-04 19:58:20
  • java中Struts2文件上传问题详解

    2023-12-16 10:27:54
  • Android高级组件Gallery画廊视图使用方法详解

    2023-07-03 14:10:48
  • Java类的定义以及执行顺序学习教程

    2023-01-14 10:44:29
  • Java Structs框架原理案例详解

    2023-12-11 16:46:22
  • asp之家 软件编程 m.aspxhome.com