spring-@Autowired注入与构造函数注入使用方式

 更新时间:2023年12月01日 15:24:07   作者:smilecjw  
这篇文章主要介绍了spring-@Autowired注入与构造函数注入使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

因为业务关系也看了些同事写的代码,因为公司没有明确规定,有一部分人在注入依赖的时候使用了用Spring推荐的构造器注入的方式,一部分人使用了@Autowired的注解进行注入。

因此,接下来我试着总结归纳一下相关的情况,做一次回顾。

用自己的话去说出来才算是真的掌握。

使用介绍

1.@Autowired注入

@RestController
@RequestMapping("/test")
public class TestController {
    @Autowired
    private List<TestService> testServices;
    @Autowired
    private List<ChainAsbtract> chains;
 
    private ChainAsbtract target;
 
}

2.构造器注入

Spring4.3+之后,constructor注入支持非显示注入方式。

@RestController
@RequestMapping("/test")
public class TestController {
//    @Autowired
    private final List<TestService> testServices;
//    @Autowired
    private final List<ChainAsbtract> chains;
 
//    @Autowired
    public TestController(List<TestService> testServices, List<ChainAsbtract> chains) {
        this.testServices = testServices;
        this.chains = chains;
    }
 
    
}

3.setter注入

@RestController
@RequestMapping("/test")
public class TestController {
//    @Autowired
    private final List<TestService> testServices;
//    @Autowired
    private final List<ChainAsbtract> chains;
 
    @Autowired
    public void setTestServices(List<TestService> testServices){
        this.testServices = testServices;
    }
 
    @Autowired
    public void setTestServices(List<ChainAsbtract> chains){
        this.chains = chains;
    }
    
}

事实上,spring在4.x版本后就推荐使用构造器的方式的来注入fileld

官方推荐理由

  • 单一职责:当使用构造函数注入的时候,你会很容易发现参数是否过多,这个时候需要考虑你这个类的职责是否过大,考虑拆分的问题;而当使用@Autowired注入field的时候,不容易发现问题
  • 依赖不可变:只有使用构造函数注入才能注入final
  • 依赖隐藏:使用依赖注入容器意味着类不再对依赖对象负责,获取依赖对象的职责就从类抽离出来,IOC容器会帮你自动装备。这意味着它应该使用更明确清晰的公用接口方法或者构造器,这种方式就能很清晰的知道类需要什么和到底是使用setter还是构造器
  • 降低容器耦合度:依赖注入框架的核心思想之一是托管类不应依赖于所使用的DI容器。换句话说,它应该只是一个普通的POJO,只要您将其传递给所有必需的依赖项,就可以独立地实例化。这样,您可以在单元测试中实例化它,而无需启动IOC容器并单独进行测试(使用一个可以进行集成测试的容器)。如果没有容器耦合,则可以将该类用作托管或非托管类,甚至可以切换到新的DI框架。

另外,在使用构造器的使用能避免注入的依赖是空的情况。

因为在bean的生命周期里面先执行的是bean的构造器,然后才给bean里面的属性赋值。

具体内容在bean的生命周期里面,后面我学习之后按照自己的理解写写。

总结

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

相关文章

  • Java垃圾回收之复制算法详解

    Java垃圾回收之复制算法详解

    今天小编就为大家分享一篇关于Java垃圾回收之复制算法详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • SpringBoot实现本地文件存储及预览过程

    SpringBoot实现本地文件存储及预览过程

    这篇文章主要介绍了SpringBoot实现本地文件存储及预览过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • java设计模式之组合模式(Composite)

    java设计模式之组合模式(Composite)

    这篇文章主要为大家详细介绍了java设计模式之组合模式Composite,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • SpringBoot集成FTP文件服务器简单应用方式

    SpringBoot集成FTP文件服务器简单应用方式

    这篇文章主要介绍了SpringBoot集成FTP文件服务器简单应用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • eclipse实现ECDSA数字签名

    eclipse实现ECDSA数字签名

    这篇文章主要为大家详细介绍了eclipse实现ECDSA数字签名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Java生成递增流水号(编号+时间+流水号)简单示例

    Java生成递增流水号(编号+时间+流水号)简单示例

    这篇文章主要给大家介绍了关于Java生成递增流水号(编号+时间+流水号)的相关资料,在开发项目漫长的过程中常常会遇到流水号需要自动生成的问题存在,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-07-07
  • spring boot如何添加拦截器

    spring boot如何添加拦截器

    本篇文章主要介绍了spring boot如何添加拦截器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 被kafka-client和springkafka版本坑到自闭及解决

    被kafka-client和springkafka版本坑到自闭及解决

    这篇文章主要介绍了被kafka-client和springkafka版本坑到自闭及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 详解如何在SpringBoot中使用WebMvc

    详解如何在SpringBoot中使用WebMvc

    Spring Boot 是一个快速、简单的开发框架,在 Spring Boot 中,我们可以使用 WebMvc 来构建 Web 应用程序,所以本文就来讲讲如何在SpringBoot中使用WebMvc吧
    2023-06-06
  • 特殊数据结构之使用Java实现单调栈示例

    特殊数据结构之使用Java实现单调栈示例

    这篇文章主要为大家介绍了特殊数据结构之使用Java实现单调栈示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09

最新评论