首页 > 其他分享 >Spring推荐使用构造注入而不使用 @Autowired 注解

Spring推荐使用构造注入而不使用 @Autowired 注解

时间:2024-07-10 11:56:59浏览次数:16  
标签:依赖 Autowired Spring 代码 注解 注入

参考:

  1. https://www.youtube.com/watch?v=CT8dbbe783s
  2. https://blog.csdn.net/qq_43371556/article/details/123529701
  3. https://blog.csdn.net/qq_33721382/article/details/104071801
  4. https://blog.csdn.net/fudaihb/article/details/139231192

什么是依赖注入

DI (Dependency Injection):依赖注入是指在 Spring IOC 容器创建对象的过程中,将所依赖的对象通过配置进行注入。我们可以通过依赖注入的方式来降低对象间的耦合度。
在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使对象之间的耦合越小越好。

Spring的依赖注入三种方式

属性注入, 构造方法注入(推荐), setter注入

优雅的解决方案-构造注入

Lombok提供了一个注解@RequiredArgsConstructor, 可以方便我们快速进行构造注入

@RestController
@RequiredArgsConstructor
public class DemoController {
	final DemoService demoService;
	...
}

注意:

  • 使用@RequiredArgsConstructor注解需要导入Lombok 包
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>${lombok}</version>
</dependency>
  • 需要注入的bean必须声明为final

  • 基于构造方法为属性赋值,容器通过调用类的构造方法将其进行依赖注入

为什么 Spring 和 IDEA 都不推荐使用 @Autowired 注解。主要原因包括:

  • 构造器注入的优势明显,不仅可以强制依赖变量初始化,还能提高代码的安全性和可维护性。

  • @Autowired 注解的使用会导致代码的隐式依赖关系,降低代码的可读性和可维护性。

  • 使用构造器注入或者其它显式的依赖注入方式,可以使代码更易于测试,避免了启动整个 Spring 容器的麻烦。

为了提高代码质量,增强代码的可读性和可测试性,开发者应尽量避免使用 @Autowired 注解,而优先选择构造器注入、Setter 注入或者 Java Config @Bean 注解等显式的依赖注入方式。通过这些替代方案,不仅可以提升代码的整体质量,还能在不同的开发阶段(如维护和测试)中,减少不必要的复杂性和潜在问题。

标签:依赖,Autowired,Spring,代码,注解,注入
From: https://www.cnblogs.com/ashuai123/p/18293778

相关文章

  • Java中的SpringAOP、代理模式、常用AspectJ注解详解
      这篇文章主要介绍了Java中的SpringAOP、代理模式、常用AspectJ注解详解,Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务,例如审计和事务管理进行内聚性的开发,需要的朋友可以参考下 +目录一、AOP简述回到主题,何为AOP?AOP即面向切面编......
  • SpringBoot 入门
    步骤1:创建maven工程创建一个空Maven工程,如下:步骤2:pom.xml文件中添加SpringBoot依赖需要添加SpringBoot项目父级依赖和SpringBoot项目相关依赖,pom.xml内容如下:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"......
  • IDEA社区版搭建Spring工程(04-加载配置文件及加解密)
    SpringMVC加载配置文件的几种方式通过context:property-placeholde实现加载配置文件在springmvc.xml配置文件里加入context相关引用<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:conte......
  • Spring AOP的几种实现方式
    1.通过注解实现1.1导入依赖<dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.1.6.RELEASE</version></dependency>1.2定义注解imp......
  • spring boot microservices
    微服务包括这些组件,服务注册,服务发现,负载均衡,配置管理,路由,断流器-过流熔断,分布式系统的日记追踪,服务安全等。thecomponentofspringbootmicroservices.springboot,itprovidesthefoudationforbuildingmicroservices.Itsimplifiestheconfigurationanssetup......
  • 毕业设计-基于Springboot+Vue的家政服务管理平台的设计与实现(源码+LW+包运行)
    源码获取:https://download.csdn.net/download/u011832806/89456882基于SpringBoot+Vue的家政服务管理平台开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven系统演示视频:链接:https://pan.baidu.com/s/1gssA8jncDvvFfo8NSHDh8g?pw......
  • 毕业设计-基于Springboot+Vue的社区医院管理服务系统的设计与实现(源码+LW+包运行)
    源码获取:https://download.csdn.net/download/u011832806/89456872基于SpringBoot+Vue的社区医院管理服务系统开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven系统演示视频:链接:https://pan.baidu.com/s/14Zrh0wu8QdSeEJof1uyc0......
  • SpringBoot 整合 MyBatisPlus框架入门
    步骤1:创建maven工程创建一个空Maven工程,如下:步骤2:pom.xml文件中添加MyBatisPlus相关依赖<dependencies><!--mybatispulus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter&l......
  • Jenkins集成部署SpringBoot
    Jenkins集成部署SpringBoot1.前言随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致。基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化。因此,传统的人工部署已经心有余而力不足。持续集成,持续部署,持......
  • IDEA社区版搭建Spring工程(03-Spring MVC搭建)
    新建一个基于Maven的"webapp"模板的基础工程在main文件夹下新建java源码文件夹将自动生成的index.jsp移入webapp的view文件夹下,在java下新建一个controller文件夹添加SpringMVC框架所需的POM配置<properties><project.build.sourceEncoding>UTF-8</pro......