Spring 的注释类型 需要弃用
2022-09-04 01:04:45
Spring的“必需注释类型”被标记为已弃用
荒废的。从 5.1 开始,赞成对所需设置使用构造函数注入(或自定义初始化Bean实现)
与相关的 RequiredAnnotationBeanPostProcessor 相同
但目前还不清楚什么是替代品,似乎应该不可用。
此更改是否会阻止我们根据需要标记方法,除非它是构造函数方法的一部分?以防止在创建类时出现意外异常?
Spring的“必需注释类型”被标记为已弃用
荒废的。从 5.1 开始,赞成对所需设置使用构造函数注入(或自定义初始化Bean实现)
与相关的 RequiredAnnotationBeanPostProcessor 相同
但目前还不清楚什么是替代品,似乎应该不可用。
此更改是否会阻止我们根据需要标记方法,除非它是构造函数方法的一部分?以防止在创建类时出现意外异常?
有三种方法可以通过注释注入bean:
现场注入
@Autowired
private FooService fooService;
设置器注射
private FooService fooService;
@Autowired
public void setFooService(FooService fooService) {
this.fooService = fooService
}
构造函数注入(这是提到的替换)
private final FooService fooService;
@Autowired
public MyComponent(FooService fooService) {
this.fooService = fooService;
}
如您所见,声明服务的唯一方法是使用构造函数注入,它替换注释,因为它强制类的用户使用所需的服务对其进行实例化。用户不必是Spring,它也可以是一个简单的单元测试。final
@Required
应将构造函数注入用于强制依赖项,并将 setter 注入用于可选依赖项,而不是字段注入。一些原因:
延伸阅读:
更新:非注释构造函数注入
正如一位评论员想知道在构造函数未注释时用注释的字段:final
@Autowired
如果一个类只声明一个构造函数开始,它将始终被使用,即使没有注释。
但是,即使在这种情况下没有必要对构造函数进行注释,我仍然会这样做:它记录了代码,如果有人添加另一个(非注释的)构造函数,代码仍然可以工作。
是的,它已被弃用,但您仍然可以通过在xml文件中提及以下内容来使用它。
<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />