gpt4 book ai didi

java - Spring构造函数注入(inject)和 super 调用冗长

转载 作者:行者123 更新时间:2023-11-29 07:31:26 28 4
gpt4 key购买 nike

自从 Spring 宣布不推荐使用字段注入(inject)以来,我就开始在我的项目中使用构造函数注入(inject)。实际上,代码感觉更漂亮、更严格,我同意。但是我遇到了一种模式,对我来说似乎有点……奇怪和冗长:

我有一个抽象服务 bean 类(带有 @Service 注释),它有 2 个依赖项,直接注入(inject)到构造函数中:

@Autowired
public AbstractService(DependencyA depA, DependencyB depB) {
this.depA = depA;
this.depB = depB;
}

然后我有多个服务 bean 类(仍然带有 @Service 注释)扩展抽象类。而且我不知道是否有另一种方法,但这是我发现必须在每个子类构造函数中为父类注入(inject)依赖项有点冗长和重复的地方:

@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 上的@Autowired 不执行任何操作。将其更改为:

@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;
}
}

...

public AbstractService(DependencyA depA, DependencyB depB) {
this.depA = depA;
this.depB = depB;
}

我对这个设置没意见。

对我来说,使用构造函数注入(inject)的主要好处是告知开发人员什么是外部依赖项。我发现它在编写单元测试时很有用。编写模拟时,您只需要知道需要模拟的内容即可。

另一个好处是在某个类具有太多依赖项时突出显示,它会提示可能需要进行重构。

替代方案将使用 setter 注入(inject)(同时保留信息方面),但我已经开始喜欢构造函数注入(inject)。

关于java - Spring构造函数注入(inject)和 super 调用冗长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41569574/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com