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

目录
  • 使用@Indexed加快启动速度
  • Spring5--@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 对象,从而达到提升性能的目的。

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

(0)

相关推荐

  • Spring Session的使用示例

    目录 Session Session常用解决方案 Spring-Session 测试代码 基于数据库的Spring-Session 基于Redis的Spring-Session 总结 Session Http协议是无状态的,这样对于服务端来说,没有办法区分是新的访客还是旧的访客.但是,有些业务场景,需要追踪用户多个请求,此时就需要Session.关于session的百度百科session Session:在计算机中,尤其是在网络应用中,称为"会话控制".Session对象存储特定用户会

  • SpringBoot 中实现跨域的5种方式小结

    一.为什么会出现跨域问题 出于浏览器的同源策略限制.同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现. 同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互.所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port) 二.什么是跨域 当一个请求url的协议

  • 详解SpringBoot简化配置分析总结

    在SpringBoot启动类中,该主类被@SpringBootApplication所修饰,跟踪该注解类,除元注解外,该注解类被如下自定注解修饰. @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan 让我们简单叙述下它们各自的功能: @ComponentScan:扫描需要被IoC容器管理下需要管理的Bean,默认当前根目录下的 @EnableAutoConfiguration:装载所有第三方的Bean @SpringB

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

    目录 使用@Indexed加快启动速度 Spring5--@Indexed注解 举个栗子 使用@Indexed加快启动速度 Spring读取@Component组件(派生性),有两种实现方式,一种是反射,一种是ASM.反射性能低主要是要loadClass,毕竟Class,需要Load,比如扫描"com.dongguabai"需要把所有的类load,效率太慢. ASM相当于直接加载类的资源信息,ReadResource. Spring5.0 后面又有了@Indexed,可以预编译. 会生

  • 关于spring5的那些事:@Indexed 解密

    目录 哪些资源会被索引? 如何使用? 原理 随着云原生的发展,很多技术会被重新掂量,重新定义,历来技术的发展也是遵循天时地利,以其势尽享其利.再云原生下,jdk的最大的问题在于笨重(几百mb),启动慢,而像Serverless架构,NodeJS技术栈可谓更完美. 其实在jdk9中倡导模块化本质在于减少JVM的体积,不需要资源(Jar)不用再加载,而启动慢的问题其实也有解决方案GraalVM (一款类似于HotSpot VM),它的先进之处在于缩短运行的成本将.java文件直接编译成native

  • Android 分析实现性能优化之启动速度优化

    目录 启动方式 冷启动(启动优化目标) 热启动 温启动 启动流程中可优化的环节 检测工具 启动时间检测 Logcat Displayed adb 命令统计 CPU profile API level >= 26 API level < 26 StrictMode 严苛模式 优化点 黑白屏问题 本文主要探讨以下几个问题: 启动方式 启动流程中可优化的环节 检测工具 优化点 黑白屏问题 启动方式 应用有三种启动状态,每种状态都会影响应用向用户显示所需的时间:冷启动.温启动与热启动 冷启动(启动优化

  • SpringBoot @SpringBootTest加速单元测试的小诀窍

    @SpringBootTest加速单元测试小诀窍 Pre SpringBoot - 应用程序测试方案 随着代码量的争夺,测试类的启动速度变得越来越慢,而大多数情况下只是为了测试一下某个实现类的某个方法而已,比如测试一个DAO层的方法,却要启动这个应用. 今天我们继续深入了解一下 稍微高级一点的用法 classes classes 属性用来指定运行测试类需要装载的 class 集合,如果不指定,那么会默认装载 @SpringBootConfiguration 注解标注的类. 如果不指定classe

  • 给IE加个参数 永远不怕IE主页被修改

    首先,打开"我的电脑",找到IE的安装目录,这里假设你的IE安装在C:\Program Files\Internet Explorer下.进入该文件夹,找到Iexplore.exe文件,对着它点击鼠标右键,在弹出的快捷菜单中中选择"发送到→桌面快捷方式",这样就在桌面上建立了一个Iexplore.exe文件的快捷方式.如果你够仔细的话,你会发现你建立的这个快捷方式名字为"Iexplore.exe",而桌面上原来的IE快捷方式名字为"In

  • IE浏览器防黑十大秘籍

    1.管理好Cookie 在IE6.0中,打开"工具"→"Internet选项"→"隐私"对话框  ,这里设定了"阻止所有Cookie"."高"."中高"."中"."低"."接受所有Cookie"六个级别(默认为"中"),你只要拖动滑块就可以方便地进行设定,而点击下方的"编辑"按钮,在&qu

  • ASP.NET也像WinForm程序一样运行的实现方法

    由于现在会使用WinForm的人是越来越少了,可能有时候做点小东西就只好用ASP.NET去完成了(喜欢控制台的朋友请不要顶针),如果是这样,悲剧就发生了:一个小工具(或者小的演示项目),发给朋友去用,总不至于让人家也装个IIS或者VS20XX吧?如果没有这二样,这种小工具还真不方便运行.怎么办?做过ASP.NET开发的人都知道:网站通常要布署到IIS上才能直接运行,当然也不排除你用VS打开项目并使用VS自带的WebDev.WebServer.exe来启动程序.这种方式难免有不方便的时候. 我平时

  • 具有负载均衡功能的MySQL服务器集群部署及实现

    在实际生产环境中,部署和实现具有一定负载均衡功能的 MySQL服务器集群,对于提高用户数据库应用系统的性能.速度和稳定性具有明显的作用.本文简要介绍了在 FreeBSD 7.0-Release系统上部署实现MySQL服务器集群的方案,并对可能出现的问题提供了相应的解决方法.1. 引言MySQL是一个高速度.高性能.多线程.开放源代码,建立在客户/服务器(Client /Server)结构上的关系型数据库管理系统(RDBMS).它始于1979年,最初是Michael Widenius为瑞典TcX公

  • 九招让硬盘更快、系统更稳定

    让硬盘更快,让系统更稳定,总结有九个环节,下面就逐一道来. 一.合理使用硬盘 何为合理使用硬盘呢?首先我们要了解硬盘盘片的物理结构.分区并格式化后的硬盘却是以扇区为基本单位的,一个分区是由若干个扇区构成的.那什么是扇区呢?我们都知道磁盘在工作时是转动的,它所存储的信息是按一系列同心圆记录在其表面上的,每一个同心圆称为一个磁道,在图1我们可以看到磁道和扇区的分布情况(当然,这只是个示意图而已,实物要比图中密得多!),很多朋友认为那个红色的"大块头"是一个扇区,但正确的认识应该是黄色的那小

  • 我教你学之系统性能优化注册表修改实例(3)

    朋友,你有没有发现过自己的Windows XP系统的速度不够快呢?是不是虽然硬件配置已经很高,但是有些地方似乎是"无可避免"得需要等待呢?其实,有很多系统设置的等待超时条件时间比较长,造成了您也只能随其一起"等待"了,只要在注册表中将这些地方的等待延迟改得小些,尤其是开关机时,系统速度就会明显加快了. ●减少开机滚动条滚动时间: 每次启动Windows XP,蓝色的滚动条都要走上好多次,其实这里我们也可以把它的滚动时间减少,以加快启动速度.打开注册表编辑器,找到HK

随机推荐