最近在IDEA中用@Autowired
注解时,发现IDEA不推荐使用这个注解了。
原因是Spring官方不再推荐这种依赖注入的方式。具体原因不再详细说明。
目前,Spring官方推荐的注入方式是构造器注入。构造器注入的优点如下:
优点:
- 明确依赖关系:使用构造器注入可以强制要求所有必须的依赖项在创建对象时提供,这可以帮助开发人员清晰地了解依赖项之间的关系。
- 可以保证对象不变性:通过将依赖项作为构造器参数传递,可以确保创建的对象在实例化后不会被修改。这有助于提高代码的可靠性和安全性。
- 易于测试:使用构造器注入的对象更易于测试,因为它们不会在运行时自动创建或重写依赖项。
- 避免循环依赖:使用构造器注入可以帮助避免循环依赖的问题,因为创建对象时所有必需的依赖项必须全部传递,而不是依赖项之间相互依赖。
所以使用构造器注入,存在循环依赖时,会抛出异常。
但构造器注入也存在缺点,比如手写构造器代码会变成冗长和繁琐。可读性变差。
解决方案:使用@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