Por gentileza, se possível, gostaria de algumas idéias sobre um problema aqui, pois creio que não achei a melhor forma de solucionar a questão.
Tenho uma interface e duas implementações, ambas anotadas com @Component e @ApplicationScoped.
Em outra classe, preciso de uma dessas implementações dependendo de um parâmetro da requisição. Minha idéia foi criar um ComponentFactory com @RequestScoped, e lá meter um if e retornar o cara adequado.
Essa abordagem não funcionou, pois no momento da injeção o Spring informou que há tres tipos daquela interface no contexto (as duas implementações e a fábrica). O erro do Spring faz sentido, mas não estou percebendo se há algum problema nessa minha modelagem…
Por enquanto deixei as duas implementações como @Request e estou criando-as dentro da factory, mas quero que esses caras tenham escopo de contexto (não preciso cria-los a cada request e sim usá-los a cada request). Mas se nao vou poder declará-los como @Component, pra nao conflitar com a fábrica, onde posso manter a instancia desses caras? Em um bom e velho Singleton? :lol:
[quote=Sergio Lopes]Se sao caras ApplicationScoped, eu criaria duas instâncias estáticas dentro da factory mesmo e pronto. Mais fácil e resolve o problema.
Realmente não vai rolar colocar @Component neles…
(uma alternativa seria mexer com qualifiers, mas eu sinceramente prefiro a sua abordagem da factory RequestScoped; fica mais fácil de usar)[/quote]
Valeu Sérgio, obrigado. Pois é, estou refatorando aqui pra manter as instancias (estaticas) dentro da factory, como comentou. É que, bom, eu não queria fazer assim :oops: :lol: , fazia algum tempo que eu nao mantinha um cara estatico e fazia um ifzao pra ver se está nulo, se não instancia…um classico!
verdade lucas, acho que assim ia ficar mais legal…um componente @ApplicationScoped que conheça as implementaçoes e que é injetado dentro da fabrica, aí a fábrica pode retornar a implementaçao adequada dependendo do parametro do request…bacana! vou fazer e ver o que sai…
alterei o codigo pra que essas implementaçoes sejam Singleton (urgh), não tá muito bonito nao hehe