Alguém sabe como fazer fazer injeção de dependência passando em tempo de execução o tipo de dependência? Eu quero transformar uma factory method em um bean injetável.
Uma factory method como essa:
public class Fabrica {
public IObjeto getObjeto(String modelo){
if(modelo == "a"){
return new ObjetoA;
else if(modelo == "b"){
return new ObjetoB;
}
}
Queria usar CDI de forma semelhante à
@Named
public class Fabrica {
public IObjeto getObjeto(String smodelo){
@Inject
@ObjetoQualifier(modelo = smodelo)
IObjeto objeto;
return objeto;
}
Mas isso não funciona pois “smodelo” tem que ser uma constante. O problema é que a interface IObjeto tem várias implementações possíveis, uma para cada modelo, e o número de modelos não é conhecido a priori, mas o cliente da fábrica é que sabe o modelo que está cadastrado em uma base, ele cria Objetos do tipo IObjeto para executar operações conforme o modelo.
Caso não exista implementadores daquela interface para o modelo especificado deve ser retornado null, para que o cliente gere uma exceção.
Pode ser que esteja tentando usar Injeção de Dependência de forma incorreta, não sendo possível usar dessa maneira vou ter que usar a fabrica, mas para cada Implementação de IObjeto terei que modificar a fábrica para retorná-lo, vou pesquisar sobre OSGI para ver se resolve.
Alguma idéia?