Spring的注释类型必需弃用

use*_*900 6 java spring deprecated

Spring的“ 必需注释类型”被标记为已弃用

不推荐使用。 从5.1开始,建议使用构造函数注入进行必需的设置(或自定义的InitializingBean实现)

与相关的RequiredAnnotationBeanPostProcessor相同

但目前尚不清楚替换的是什么,似乎应该不可用。

除非它是构造方法的一部分,否则此更改是否会使我们无法按要求标记方法?防止在类创建时发生意外异常?

qut*_*tax 11

有三种通过注释注入bean的方法:

现场注入

@Autowired
private FooService fooService;
Run Code Online (Sandbox Code Playgroud)

二传手注射

private FooService fooService;

@Autowired
public void setFooService(FooService fooService) {
    this.fooService = fooService
}
Run Code Online (Sandbox Code Playgroud)

构造函数注入(这是上述替换项)

private final FooService fooService;

@Autowired
public MyComponent(FooService fooService) {
    this.fooService = fooService;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,声明服务的唯一方法final是使用构造函数注入,它会替换@Required注释,因为它会强制类的用户使用所需的服务实例化它。用户不必是Spring,它也可以是一个简单的单元测试。

您应该对强制性依赖项使用构造函数注入,而对可选依赖项使用setter注入,而不是字段注入。原因如下:

  • 它使每个人都清楚需要哪些依赖项
  • 它使测试更加容易
  • 您可以使对象不变

进一步阅读: