Bom dia, amigos.
Gostaria de uma ajuda com esse problema, por gentileza.
O cenário é: tenho uma interface e duas implementações, ambas anotadas com @Component do VRaptor. Minha idéia era fazer um decorator com elas, assim:
public interface Interface {
public void metodo();
}
@Component
public class ComponentA implements Interface {
private final ComponentB b;
public ComponentA(ComponentB b){
this.b = b;
}
...
}
@Component
public class ComponentB implements Interface {
...
}
@Component
public class ComponentCliente {
//nessa classe seria injetado o componentA, que por sua vez encapsula o componentB
private final Interface i;
public class ComponentClient(Interface i) {
this.i = i;
}
}
Ocorre que ao tentar realizar a injeção, o Spring avisa que há dois beans do tipo Interface. Isso faz sentido mesmo.
Tentei anotar o ComponentA com @Primary, mas não rolou também. Na verdade vendo o fonte, o VRaptor não considera essa anotação e também o uso dela não é repassado para o Spring, e o VRaptor marca ambos os beans como “primary=true”. Na verdade isso faz sentido também, pra podermos sobrescrever os componentes padrão do Vraptor…
Uma solução que muito provavelmente funcionará é configurar esses beans no xml do Spring mesmo, mas pessoalmente gosto de manter todos os beans com o @Component do VRaptor. Será que haveria algum jeito de fazer o cenário acima dar certo?
Obrigado!
