Я действительно новичок в 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();
}
}
К сожалению, это, даже если работает, не позволяет мне использовать @injection в EngineA. На самом деле cm в EngineA равен нулю. Как я могу заставить это работать?
БР и СПАСИБО! Стефан