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

时间:2018-08-20 08:45:49

标签: java design-patterns

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

@SpringComponent
@PrototypeScope
public class MyAutowiredClass {

    private String myVariabeThatTheUserShouldSet;

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

    }
}

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

1 个答案:

答案 0 :(得分:1)

有点复杂。如果不是在春季上下文中,则可以将该变量添加到构造函数中,并使其成为“必需”变量。因此,要在Spring上下文中实现这一目标,我将建议以下几点:

  1. 如果可能,请将该值作为依赖项注入的一部分传递,而不是尝试解决该问题。我知道它是动态的,但通常仍然具有商业意义,并且有一种方法可以做到。例如,如果您要当前用户的电子邮件,则可以添加一些服务来检索该值,然后将该服务传递给组件并从中提取该值。或者,如果您想要一些公司配置,则可以添加一个服务,为您提供该价值等。这是“春天”的方式,我会朝着这一方向努力。

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

  3. 为此值添加一个setter,如果未设置,则抛出异常。那样会更糟,因为如果检查了异常,则将需要try / catches,否则,人们会忘记设置字段,因此我会避免该解决方案。