首页 > 其他分享 >Spring依赖注入,该放弃@Autowired注解了

Spring依赖注入,该放弃@Autowired注解了

时间:2023-02-27 15:22:06浏览次数:42  
标签:依赖 Autowired Spring 构造 注解 final 注入

最近在IDEA中用@Autowired注解时,发现IDEA不推荐使用这个注解了。
原因是Spring官方不再推荐这种依赖注入的方式。具体原因不再详细说明。

目前,Spring官方推荐的注入方式是构造器注入。构造器注入的优点如下:

优点:

  1. 明确依赖关系:使用构造器注入可以强制要求所有必须的依赖项在创建对象时提供,这可以帮助开发人员清晰地了解依赖项之间的关系。
  2. 可以保证对象不变性:通过将依赖项作为构造器参数传递,可以确保创建的对象在实例化后不会被修改。这有助于提高代码的可靠性和安全性。
  3. 易于测试:使用构造器注入的对象更易于测试,因为它们不会在运行时自动创建或重写依赖项。
  4. 避免循环依赖:使用构造器注入可以帮助避免循环依赖的问题,因为创建对象时所有必需的依赖项必须全部传递,而不是依赖项之间相互依赖。
    所以使用构造器注入,存在循环依赖时,会抛出异常。

但构造器注入也存在缺点,比如手写构造器代码会变成冗长和繁琐。可读性变差。

解决方案:使用@RequiredArgsConstructor + final关键字的方式。

可以使用@RequiredArgsConstructor注解来自动生成构造器,并且通过使用final关键字来确保生成的构造器参数是不可变的。这样可以省去手动编写构造器的步骤,使代码更加简洁。

使用@RequiredArgsConstructor注解时,Spring会查找这个类中未被注入的final或者@NonNull属性,然后自动生成一个构造器,参数为这些属性。如果这些属性没有设置初始值,那么生成的构造器会要求在创建对象时传入这些属性的值

@RequiredArgsConstructor
public class MyService {
    private final MyDependency myDependency;
    private final String message;
    
    public void doSomething() {
        myDependency.doSomethingWith(message);
    }
}

在上面的代码中,MyService类中的myDependency和message属性被声明为final,并且使用了@RequiredArgsConstructor注解。这样,Spring会自动生成一个构造器,参数为MyDependency和String类型的message属性。

标签:依赖,Autowired,Spring,构造,注解,final,注入
From: https://www.cnblogs.com/virde/p/17159838.html

相关文章

  • SpringJUnit4ClassRunner+mockito (二)
    pom.xml1<dependency>2<groupId>org.springframework.boot</groupId>3<artifactId>spring-boot-starter-test</artifactId>4<scope>test</scope>......
  • springboot修改事务隔离级别
       【SpringBoot】事务的隔离级别、Spring的事务传播机制_51CTO博客_springboot事务隔离级别......
  • SpringBoot移除liquibase
    SpringBoot移除liquibase1、spring自动加载配置的jar:org.springframework.boot:spring-boot-autoconfigure:2.3.2.RELEASE在spring-boot-autoconfigure包中查找spring.......
  • rabbitmq的启动命令和springboot整合使用rabbitmq
    环境:windows安装erlang和rabbitmq的过程这里不多说,记得两个的版本要对应。1.启动rabbitmq:进入sbin目录:其中可能报错:则需要终止已经开始的进程(可能是之前启动过)tasklist|......
  • SpringBoot多数据源以及事务处理
    背景在高并发的项目中,单数据库已无法承载大数据量的访问,因此需要使用多个数据库进行对数据的读写分离,此外就是在微服化的今天,我们在项目中可能采用各种不同存储,因此也需要......
  • Spring Boot 实现日志链路追踪,无需引入组件,让日志定位更方便!
    来源:blog.csdn.net/qq_35387940/article/details/125062368前言从文章标题就知道,这篇文章是介绍些什么。这是我一位朋友的问题反馈:好像是的,确实这种现象是普遍存在的......
  • 总结SpringBoot1.x迁移到2.x需要注意的问题
    SpringBoot1.x和SpringBoot2.x版本差异化还是比较大的,有些三方依赖组件有些是基于2.0版本为标准升级的,当我们将项目由1.0升级到2.0时会出现依赖的方法不存在或方法错误......
  • java扫描指定注解的工具类
    publicclassBaseClassUtils{privatestaticfinalStringresource_pattern="/*.class";publicstaticMap<String,Class>scanMyComponentAnnotation(Str......
  • zxk-logs_springboot集成redis
    pom.xml:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><gro......
  • springboot默认的json配置
    springboot默认的json配置1.@JsonIgnore返回前端时对应字段不进行序列化返回publicclassUser{@JsonIgnoreprivateStringname;}2.@JsonFormat日期格......