gpt4 book ai didi

java - Spring @Autowired 违反了 DRY 原则。可以做什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:36 24 4
gpt4 key购买 nike

我使用的代码中的一些 Controller 和服务有很多 @Autowired 依赖项。有两种流行的 Autowiring 方式—— Autowiring 字段和 Autowiring 构造函数。在第一种情况下,您复制注释 @Autowired

public class SomeController {
@Autowired
private SomeService1 someService1;
@Autowired
private SomeService2 someService2;
@Autowired
private SomeService3 someService3;
}

在第二种情况下,您创建了一个丑陋且无用的构造函数。

public class SomeController {
private final SomeService1 someService1;
private final SomeService2 someService2;
private final SomeService3 someService3;

@Autowired
public SomeController(SomeService1 someService1,
SomeService2 someService2,
SomeService3 someService3) {
this.someService1 = someService1;
this.someService2 = someService2;
this.someService3 = someService3;
}
}

当你有很多应该 Autowiring 的字段时,情况会变得更糟。我同意很多依赖关系通常标志着一个糟糕的设计,但这不是我的问题。我想使用 @AutowireAll 之类的东西来避免代码重复 - 将 Autowiring 所有可能 Autowiring 的字段的注释。我寻找它,但找不到。可能的代码看起来像

@AutowireAll
public class SomeController {
private SomeService1 someService1;
private SomeService2 someService2;
private SomeService3 someService3;
}

如何避免代码重复?

最佳答案

使用 Lombok 可以避免代码重复注解 @AllArgsConstructor

@AllArgsConstructor
public class SomeController {
private final SomeService1 someService1;
private final SomeService2 someService2;
private final SomeService3 someService3;
}

它在 Spring/Spring Boot 版本中工作,不需要在唯一的构造函数上使用 @Autowired。这些版本是Spring Boot 1.4+, Spring 4.3+

@AllArgsConstructor 创建一个可能需要的构造函数(请参阅他的回答下的 Karol Dowbecki 评论)。

缺点是为了使用 Lombok,您需要一个 IDE 插件。 Eclipse 和 IDEA 都有这样的插件,但由于您不是唯一的项目开发人员,所有其他开发人员也需要它。

关于java - Spring @Autowired 违反了 DRY 原则。可以做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49964732/

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