Spring中spring-context-indexer依赖有什么用
这篇文章给大家分享的是有关Spring中spring-context-indexer依赖有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
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
说明
虽然类路径扫描非常快,但是Spring内部存在大量的类,添加此依赖,可以通过在编译时创建候选对象的静态列表来提高大型应用程序的启动性能。
但是在此模式下,作为组件扫描目标的所有模块都必须使用此机制。才可以。
需要spring5以上才能使用,亲测有效, 依赖如下:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-indexer</artifactId> <version>5.2.0.RELEASE</version> <optional>true</optional></dependency>
然后再你的启动类上加上一个注解: @Indexed ,用来表示, 你开启了索引, 会加速项目的启动速度.
原理说明:
先看官方的解释:
在项目中使用了@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 中的模式注解不会被识别。
请务必注意这样的问题。
感谢各位的阅读!关于“Spring中spring-context-indexer依赖有什么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341