(VRaptor) ComponentFactory @RequestScoped, e beans @ApplicationScoped

Olá amigos,

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:

Bem, agradeço a ajuda de todos.

Obrigado!

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=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!

nao precisa ser estático, pode ser dois atributos normais num componente @ApplicationScoped, inicializados no construtor ou num @PostConstruct.

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

valeu!