gpt4 book ai didi

cdi - CDI @Producer 方法可以接受自定义参数吗?

转载 作者:行者123 更新时间:2023-12-04 17:23:55 24 4
gpt4 key购买 nike

我想我了解 CDI 的工作原理,为了深入研究它,我想尝试将它与现实世界的示例一起使用。我被一件事困住了,我需要你的帮助才能让我理解。我非常感谢您在这方面的帮助。

我有自己的工作流框架,使用 Java 反射 API 和 XML 配置开发,其中基于特定类型的“源”和“事件名称”我加载适当的模块类并在其上调用“过程”方法。在我们的项目中一切正常。

我对 CDI 功能感到兴奋,并想尝试使用工作流框架,我计划在其中注入(inject)模块类,而不是使用反射等加载它们......

只是为了给你一个想法,我会尽量在这里保持简单。

“Message.java”是一种Transfer Object,它带有“Source”和“eventName”,以便我们可以适本地加载模块。

public class Message{
private String source;
private String eventName;
}

模块配置如下
<modules>
<module>
<source>A</source>
<eventName>validate</eventName>
<moduleClass>ValidatorModule</moduleClass>
</module>
<module>
<source>B</source>
<eventName>generate</eventName>
<moduleClass>GeneratorModule</moduleClass>
</module>
</modules>

模块加载器.java
public class ModuleLoader {
public void loadAndProcess(Message message){
String source=message.getSource();
String eventName=message.getEventName();

//Load Module based on above values.

}
}

问题

现在,如果我想通过 CDI 实现相同的功能以注入(inject)一个模块(在 ModuleLoader 类中),我可以使用 @Produce 方法编写工厂类,它可以做到这一点。但我的问题是,

a) 如何将 Message Object 传递给 @Produce 方法以根据 eventName 和 source 进行查找?

你能给我一些建议吗?

提前致谢。

最佳答案

我认为您可能在制作人方面走错了路。相反,使用观察者可能会更好,尤其是根据您所描述的内容。

我假设“消息”传输对象像系统范围的事件一样抽象地使用,基本上您触发事件并且您希望在您创建的 XML 框架中定义一些处理程序来确定事件的正确管理器,实例化它(如果需要),然后调用传递事件的类。


@ApplicationScoped
public class MyMessageObserver {

public void handleMessageEvent(@Observes Message message) {
//Load Module based on above values and process the event
}
}

现在让我们假设你想使用你的原始界面(我猜它看起来像):

public interface IMessageHandler {
public void handleMessage(final Message message);
}

@ApplicationScoped
public class EventMessageHandler implements IMessageHandler {

@Inject
private Event<Message> messageEvent;

public void handleMessage(Message message) {
messageEvent.fire(message);
}
}

然后在您想要使用它的任何遗留类中: @Inject
IMessageHandler handler;

这将允许您执行您所描述的所有操作。

关于cdi - CDI @Producer 方法可以接受自定义参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076582/

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