gpt4 book ai didi

java - 通过组件构造函数 Autowiring 静态成员

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:40 25 4
gpt4 key购买 nike

我知道这样可以编译,但我的问题是,这是个好主意吗?我很好奇为什么这可能不是一个好主意。更好的是,如果 SomeStaticClass 是一个 @Component,但它也必须是 MyComponent 的静态成员,是否有替代方案。我的理解是,让 Spring Autowiring 静态成员的设计很糟糕。根据我读过的内容,我仍然不太明白为什么。假设我有以下内容:

@Component
public final class MyComponent {

private static SomeStaticClass someStaticClass;

@Autowired
MyComponent(SomeStaticClass someStaticClass) {
MyComponent.someStaticClass = someStaticClass;
}

}

最佳答案

设计糟糕的几个原因:

  • static 可变字段通常是一个糟糕的设计

  • 使测试更难 - 一旦设置了该字段,它将在下一次测试中保持设置状态,可能会产生隐藏的相互依赖性

  • 如果您想拥有两个 MyComponent 实例,每个实例都有不同的 SomeStaticClass 怎么办?困惑。

  • 您不能通过 static 字段或 setter Autowiring 注入(inject)值,这是明确禁止的。这一定是有原因的。

  • 为什么你甚至需要它? MyComponent 中是否有static 方法?为什么?

  • 如果上述情况属实,您如何防止在构造函数初始化该字段之前调用 MyComponent.staticMethod()? Spring 的全部意义在于返回完全填充的安全 bean

关于java - 通过组件构造函数 Autowiring 静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13940140/

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