gpt4 book ai didi

java - 是否有一种模式可以强制在注入(inject)的组件中设置属性?

转载 作者:行者123 更新时间:2023-12-02 10:54:00 25 4
gpt4 key购买 nike

我想知道是否有一种模式强制我的组件的用户在 Autowiring 后设置属性。例如我有这个:

@SpringComponent
@PrototypeScope
public class MyAutowiredClass {

private String myVariabeThatTheUserShouldSet;

public MyAutowiredClass(someOtherStuff ...(not my StringVariable)){

}
}

在此示例中,如何强制从此组件的用户设置 myVariabeThatTheUserShouldSet?

最佳答案

嗯,有点复杂。如果它不在 spring 上下文中,您可以将该变量添加到构造函数中并使其成为“必需”。因此,为了在 Spring 环境中实现这一目标,我建议如下:

  1. 如果可能,请将该值作为依赖项注入(inject)的一部分传递,而不是尝试解决它。我知道这是动态的,但通常它仍然具有商业意义,并且有办法做到这一点。例如,如果您想要当前用户的电子邮件,您可以添加一些检索该值的服务,并将该服务传递给您的组件并从那里提取该值。或者,如果您想要一些公司配置,您可以添加一个为您提供该值(value)的服务等。这是“Spring”方式,我倾向于这种方式。

  2. 一个更简单的解决方案是将该必填字段添加到实际需要它的方法的方法签名中。它会使签名重载一个字段,但会强制用户传递一个值。如果您需要该字段用于几个方法,而不是为了组件的正确工作,那么这将是最容易实现/理解的解决方案。

  3. 为该值添加一个 setter ,如果未设置则抛出异常。但这会更糟糕,因为如果检查异常,则需要尝试/捕获,否则人们会忘记设置该字段,所以我会避免该解决方案。

关于java - 是否有一种模式可以强制在注入(inject)的组件中设置属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51927092/

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