【发布时间】:2017-09-11 10:12:17
【问题描述】:
我真的是 JEE CDI 的新手,但昨晚试了半天才找到问题的解决方案。
我有一个控制器类,当调用启动时,它应该根据参数使用生产者注入一个有状态的 bean。这个提到的有状态 bean 本身包含一个注入的 bean。
说实话,不确定这是否有效,非常感谢任何反馈=)
这里有一些虚拟代码可以帮助理解我想要做什么(基于https://docs.jboss.org/weld/reference/1.0.0/en-US/html/producermethods.html)。可能我现在完全搞砸了很多东西...但是我找不到如何解决此类问题的示例,或者我无法理解它=/
控制器(主要服务)
@Singleton
@Startup
public class Controller
{
private IEngine engine;
@PostConstruct
private void startup(int typeID)
{
Factory f = new Factory();
engine = f.getEngine(typeID)
}
}
工厂
public class Factory
{
@Produces
public IEngine getEngine(int typeID)
{
if(typeID==1)
{
return new EngineA();
}
else
{
return new EngineB();
}
}
多态的IEngine接口
public interface IEngine
{
void startUp();
}
这是一个EngineA的例子,EngineB是类似的
@Stateful
public class EngineA implements IEngine
{
@Inject
private CoinManager cm;
//@Override
public void startUp()
{
cm.doSomeThing();
}
}
不幸的是,即使工作正常,这也不允许我在 EngineA 中使用 @injection。事实上,EngineA 中的 cm 为空。我怎样才能让它发挥作用?
BR 和 THX! 斯蒂芬
【问题讨论】:
标签: jakarta-ee polymorphism cdi producer