提升Spingboot启动速度,减少@Autowired的使用

1、注解注入分析

第一确定,我们为什么需要使用 @Autowired 注解?@Autowired 是一个注释,它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。对 Spring Bean 这块不熟悉的,可以看【Spring 源码分析】这个系列的文章

@RequiredArgsConstructor 是 lombok 提供的注解,作用于类,用于生成包含 final 和 @NonNull 注解的成员变量的构造方法。那么也就是说,我们需要在注入的属性上增加 final 或 @NonNull 修饰就可以了

Spring 中三种注入方式、

第一种:Field Injection:属性注入,这种注入方式通过 Java 的反射机制实现,所以 private 的成员也可以被注入具体的对象

提升Spingboot启动速度,减少@Autowired的使用

第二种:Constructor Injection 构造注入,通过对象构建的时候建立关系,所以这种方式对对象创建的顺序会有要求,当然 Spring 会为你搞定这样的先后顺序,除非你出现循环依赖,然后就会抛出异常

提升Spingboot启动速度,减少@Autowired的使用

第三种:Setter Injection set 注入,通过调用成员变量的 set 方法来注入想要使用的依赖对象

提升Spingboot启动速度,减少@Autowired的使用

2、实例分析

项目中的@Autowired 注解,有黄色提示,根据提示修改代码之后,

提升Spingboot启动速度,减少@Autowired的使用

鼠标放上去看到提示使用构造方法注入

提升Spingboot启动速度,减少@Autowired的使用

有两种形式,第一种,直接创建空构造,实际上是将属性修改为 final。第二种,每个属性的注入都在构造方法上增加一个参数,如下

提升Spingboot启动速度,减少@Autowired的使用

第二种代码太臃肿了,并且很繁琐,所以这里我们使用第一种方式,final 构造,于是代码变成了以下格式

提升Spingboot启动速度,减少@Autowired的使用

大量使用@RequiredArgsConstructor(onConstructor_ = @Autowired)

后发现启动时间明显快了一半多,

没有使用这个注解前,启动时间如图

提升Spingboot启动速度,减少@Autowired的使用

使用@RequiredArgsConstructor(onConstructor_ = @Autowired)后

提升Spingboot启动速度,减少@Autowired的使用

© 版权声明

相关文章

19 条评论

  • 头像
    雪人儿 读者

    首先发明了new这个关键字,然后再发明一个依赖反转的名词去否定new,搞个bean容器依靠xml配置,然后觉得xml配置麻烦,再发明一个用注解配置的办法,然后又发现有其它缺陷,再发明个构造函数依赖注入,绕了一圈回到原点…..

    无记录
    回复
  • 头像
    雨先生 读者

    你这个能解决循环依赖吗

    无记录
    回复
  • 头像
    I2sWday 投稿者

    少那么10秒的启动时间,有什么实际的意义呢?脱离了实际业务的需求都是耍流氓

    无记录
    回复
  • 头像
    神马推广咚咚酱 读者

    那你就直接new吧

    无记录
    回复
  • 头像
    Lotte-F 读者

    启动速度提升,没必要吧。为了启动快,损失运行时性能就更不合适了。

    无记录
    回复
  • 头像
    古衣市巷蹦蹦骑手 投稿者

    启动用时在一个合理的时间范围内,多个十来秒也没有什么不能接受的,只要服务接口响应快,必要的高并发要求是无所谓的

    无记录
    回复
  • 头像
    I扶老奶奶闯红灯II 读者

    要启动那么快干啥

    无记录
    回复
  • 头像
    明白 读者

    构造函数注入,代码可读性有点差

    无记录
    回复
  • 头像
    ysuihC 读者

    难道他不是因注解而火的吗?

    无记录
    回复
  • 头像
    健康咨询小贴士 读者

    孔乙己么

    无记录
    回复
  • 头像
    老司机给个靠谱的网站 读者

    这个为什么能提升启动速度,背后原理是什么?

    无记录
    回复
  • 头像
    睡到杨幂才改名 读者

    每一个名词我都认识,连起来就不知道在说啥了

    无记录
    回复
  • 头像
    耶吃一口小酥糕 读者

    Java就是繁琐,net太简洁了

    无记录
    回复
  • 头像
    正儿八经的学生APf 读者

    。。。。spring native 直接秒杀花里胡哨

    无记录
    回复
  • 头像
    可风 读者

    提升了启动速度?理由呢,无非是注入阶段提前了罢了,一个是构造器时机,一个是属性填充时机,

    无记录
    回复
  • 头像
    是宝贝不是小吴 投稿者

    少了好多配置,多了注解。。。

    无记录
    回复
  • 头像
    芝蓝 读者

    作者全部回复“测试而已,实际项目没有使用过”

    无记录
    回复
  • 头像
    Ouvg 读者

    歪理

    无记录
    回复
  • 头像
    静宝宝是小公举呀 读者

    减少@Auto表wired的使用

    无记录
    回复