Field injection is not recommended 后 @Autowired注解的属性为空怎么办
时间: 2023-12-13 18:11:00 浏览: 173
如果使用字段注入,建议将属性声明为私有,并使用构造函数或setter方法进行注入,而不是直接使用@Autowired注解。这样可以更好地控制依赖注入的顺序,避免循环依赖等问题。如果@Autowired注解的属性为空,可能是由于Spring没有找到要注入的Bean。可以检查是否在配置文件中正确地配置了Bean,并且是否使用了正确的@Component或@Service注解。还可以使用@Qualifier注解指定要注入的Bean的名称或@Primary注解指定首选的Bean。
相关问题
在使用@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方法注入来替代字段注入。
@Autowired @Resource
@Autowired and @Resource are both annotations used in Spring Framework for dependency injection.
@Autowired is used to inject a bean by type. Spring will look for a bean of the same type as the field or parameter being annotated and automatically wire it to the class. If there are multiple beans of the same type, @Autowired can also be used with @Qualifier to specify which bean to inject.
@Resource is used to inject a bean by name. It can also be used to inject a bean by type, similar to @Autowired, but it requires a name attribute to specify the name of the bean to be injected. It is a standard Java EE annotation and can be used in non-Spring environments, but it is less flexible than @Autowired.
In general, @Autowired is recommended for most situations, as it is more flexible and can handle most injection scenarios. However, @Resource can be useful in certain cases where more fine-grained control over bean injection is needed.
阅读全文