【问题标题】:Wildfly Injection depending on Condition (system-property)Wildfly 注入取决于条件(系统属性)
【发布时间】:2018-03-26 09:24:13
【问题描述】:

我正在使用 Wildfly atm,并且正在尝试使用 @Annotations。 对某些接口有多个实现我希望我的应用程序根据某些条件(取决于我的standalone.xml 中指定的系统属性)选择某个实现。

您能否指出一些提示以了解如何实现此类行为。

我不想直接将实现指定为@Alternative,因为我想将各种注入与一些系统属性设置捆绑在一起。

standalone.xml

<system-properties>
    <property name="env" value="stage"/>
</system-properties>

界面

public interface LoginServerDao {
    public String test();
}

实施1

@MyCustomConditionalAnnotation(env = "live")
public class LoginServerDaoImpl implements LoginServerDao  {
    @Override
    public String test() {
        return "live";
    }
}

实施 2

@MyCustomConditionalAnnotation(env = "stage")
public class DummyLoginServerDaoImpl implements LoginServerDao  {
    @Override
    public String test() {
        return "dummy";
    }
}

注解接口

@???
public @interface MyCustomConditionalAnnotation {

    String env() default "test";

    ???

}

我非常感谢您对此提供的任何帮助(或参考一些我什至可能没有想到的完全不同的解决方案/模式)。

提前致谢!

【问题讨论】:

  • 您可能想看看CDI。 WildFly 使用Weld 来实现它。
  • @James 感谢您的回复!我很抱歉我确定我已经回复了!一定错过了点击“添加评论”按钮。关于你的提示:这正是我想要使用的。我已经在为我的 DAO 使用过滤器、启动 Hooks 和注入。但是,我在上面的示例中找不到有关如何实现我想要实现的目标的提示。也许生产者方法是我正在寻找的。无论如何,非常感谢您的回复! :)

标签: dependency-injection annotations wildfly system-properties


【解决方案1】:

我终于找到了解决问题的方法!

刻板印象

在 stackoverflow 上找到答案:Disable @Alternative classes

@Cassio Mazzochi Molin 在编写你自己的替代刻板印象

中解释

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 2015-03-28
    • 2015-08-23
    相关资源
    最近更新 更多