Dúvidas sobre IOC no vRaptor

5 respostas
Mark0z

Olá pessoal, estou com uns probleminhas, tenho este conjunto de classes: PessoaController, PessoaService e Pessoa.
Anotei a primeira com o @Resource (vraptor) e a segunda com @Component(do Vraptor), EntityManager (JPA provider do vraptor) é injetado em PessoaService, PessoaService é injetado na classe PessoaController, até aí tudo bem o código funcionou.
Mas eu não quero Anotação do Vraptor no código da minha classe PessoaService. Tentei usar @Component do Spring, mas não funcionou,
classe não foi registrada automaticamente, utilizei o @Named do javax.inject, sem êxito, usando o Spring e depois o Guice.
Quer dizer q por default o vraptor no usa essas outras anotações ou estou fazendo algo errado?

Uso o Vraptor 3.4…

Desde já obrigado!!!,

5 Respostas

Lucas_Cavalcanti

Qual é o problema de usar @Component do VRaptor no seu PessoaService?

é porque vc vai distribuir essa classe para outras pessoas dentro de um jar?

Mark0z

Isso mesmo, eu estou pensando em usar este e outros Services em outros projetos, mas utilizando o JSF(Com algum framework que dê suporte a IOC/DI) por exemplo.
Mas, Lucas me diz uma coisa, @Named não seria mesma coisa de @Component pro Vraptor? Pois o Spring 3.0 tem suporte a essa anotação do javax.inject…

Lucas_Cavalcanti

Não exatamente… @Named serve para dar nome para a dependência.

se vc usa o Spring por tras vc pode usar qqer coisa que o spring suporta.

se vc for usar em outro projeto como um jar, não tem problema usar o @Component do VRaptor. Vc não precisa do jar da anotação para usar a classe.

Mark0z

Beleza, Lucas, valeu pelas dicas.

jurado

Se vc por algum motivo nao quiser anotar a sua classe, poderia criar um ComponentFactory e entao anotá-lo:

class PessoaService{
// ...
}

@Component
@ApplicationScoped // ou outro escopo que preferir
class PesoaServiceCreator implements ComponentFactory<PessoaService>{
  PessoaService instance = new PessoaService();

  @Override
  public PessoaService getInstance(){
    return instance;
  }
}
Criado 11 de novembro de 2011
Ultima resposta 16 de nov. de 2011
Respostas 5
Participantes 3