spring boot autowired field injection is not recommended
时间: 2023-05-10 21:02:37 浏览: 162
Spring Boot是一个非常流行的Java框架,使用Spring Boot开发应用程序可以极大地简化应用开发过程。在使用Spring Boot时,自动注入是一种很方便的依赖注入方式,可以通过@Autowired注解在类里面注入依赖。但是,Spring Boot自动注入的方式对于一些开发者而言并不是一个好习惯,甚至被认为是一个反模式。
使用@Autowired进行字段注入的最大问题在于,它破坏了SOLID原则中的单一职责原则。这意味着,你的代码中的类现在不仅与其自身的职责有关,还与其依赖项之间的关系有关。这样的代码结构会让程序变得复杂,难以协同工作。另外,这样的代码容易造成循环依赖问题。
更推荐的做法是使用构造函数注入方式,而不是使用@Autowired进行字段注入。这种方式遵循依赖倒置原则,依赖项仅与接口相关联,而不是与特定的实现绑定,可以更好地解耦和。此外,它还会强制依赖项通过构造函数传递,而不是在使用类的时候自动注入。
总之,虽然Spring Boot的自动注入功能非常方便,但是过度使用自动注入对程序的可维护性和可读性有很大的影响。因此,我们应该尽可能遵循面向对象编程的设计原则,使用构造函数注入作为首选注入方式。
相关问题
在使用@Autowired时报错 Field injection is not recommended
在使用@Autowired时报错 "Field injection is not recommended" 是因为字段注入(Field injection)不再被推荐使用。字段注入是指直接在类的字段上使用@Autowired注解来进行依赖注入。这种方式存在一些问题,比如难以进行单元测试、难以进行循环依赖的解决等。因此,推荐使用构造函数注入或者Setter方法注入来替代字段注入。
下面是使用构造函数注入的示例代码:
```java
@Service
public class MyService {
private final MyDependency myDependency;
@Autowired
public MyService(MyDependency myDependency) {
this.myDependency = myDependency;
}
// ...
}
```
在上面的示例中,通过在构造函数上使用@Autowired注解,将MyDependency作为构造函数的参数进行注入。这样可以保证MyService类在实例化时,必须提供一个MyDependency的实例,从而解决了依赖注入的问题。
另外,你也可以使用Setter方法注入来替代字段注入。示例代码如下:
```java
@Service
public class MyService {
private MyDependency myDependency;
@Autowired
public void setMyDependency(MyDependency myDependency) {
this.myDependency = myDependency;
}
// ...
}
```
在上面的示例中,通过在Setter方法上使用@Autowired注解,将MyDependency注入到MyService类中。
总结来说,当使用@Autowired时报错 "Field injection is not recommended",建议使用构造函数注入或者Setter方法注入来替代字段注入。
Field injection is not recommended 后 @Autowired注解的属性为空怎么办
如果使用字段注入,建议将属性声明为私有,并使用构造函数或setter方法进行注入,而不是直接使用@Autowired注解。这样可以更好地控制依赖注入的顺序,避免循环依赖等问题。如果@Autowired注解的属性为空,可能是由于Spring没有找到要注入的Bean。可以检查是否在配置文件中正确地配置了Bean,并且是否使用了正确的@Component或@Service注解。还可以使用@Qualifier注解指定要注入的Bean的名称或@Primary注解指定首选的Bean。
阅读全文