【发布时间】:2017-01-10 13:06:30
【问题描述】:
自从 Spring 宣布不推荐使用字段注入以来,我开始在我的项目中使用构造函数注入。实际上,代码感觉更漂亮,更严格,我可以接受。 但我遇到了一个看起来有点……奇怪和冗长的模式:
我有一个抽象服务 bean 类(带有 @Service 注释),它有 2 个依赖项,直接注入到构造函数中:
@Autowired
public AbstractService(DependencyA depA, DependencyB depB) {
this.depA = depA;
this.depB = depB;
}
然后我有多个服务 bean 类(仍然使用 @Serviceannotation)扩展抽象类。
而且我不知道是否有另一种方法,但这是我发现在每个子类构造函数中为父级注入依赖项的地方有点冗长和重复:
@Service
public class ServiceA extends AbstractService {
private final DepC depC;
@Autowired
public ServiceA(DepA depA, DepB depB, DepC depC) {
super(depA, depB);
this.depC = depC;
}
}
我只是想知道这是否正确,您对此有何看法?
【问题讨论】:
-
为什么要冗长或重复。是的,对于只有一个可能的构造函数的类,你可以这样说,但是如果
AbstractService中有多个不同的重载构造函数怎么办,ServiceA将如何确定调用哪个。但是是的,这是正确的方法。 -
@Autowired上的AbstractService没有任何作用。 -
我看不出你为什么需要用
@Autowired注释你的抽象构造函数。这不是必需的,因为您的字段将被注入到您的超类构造函数中。其他一切看起来都很好。
标签: java spring dependency-injection