Injeção de dependência por anotation

46 views
Skip to first unread message

Sfalsin, Marcio

unread,
Feb 22, 2011, 6:04:53 AM2/22/11
to caelum-...@googlegroups.com

Pessoal,

Eu tenho uma sugestão de implementação para o VRaptor, um annotation para injeção de depencia poderia ser uma possibilidade bem útil ao meu ver, algo talvez assim:

@Injected
private Result result;
@Injected
private UsuarioDao usuarioDao;

O que acham?

Em 20/02/2011 16:55, "Otávio Scherer Garcia" <ota...@otavio.com.br>escreveu:

Com o Spring acontece o mesmo erro.

Estranho que todos os objetos que são simples como Rate ou Branch, que possuem apenas tipos do Java funcionam bem. Os objetos mais complexos como Setting que possui um OneToOne para Owner, não funciona.

Essas classes possuem apenas construtor default + construtor com todos os atributos, e apenas getters. São imutáveis. Se eu coloco os setters funciona.



On 02/20/2011 03:50 PM, Lucas Cavalcanti wrote:
>
> testa com o spring ao invés do guice e vê se f...


--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" grou...

Guilherme Silveira

unread,
Feb 22, 2011, 7:59:57 AM2/22/11
to caelum-...@googlegroups.com
Bom dia Marco,

No VRaptor 2 implementamos injeção em field por anotação primeiro, mas
na época ainda não entendiamos direito que isso atrapalhava o design
da classe. Colocar a mão em um campo interno assim dificulta a
utilização da classe em outras situações (que é incomum no caso do
controller), e faz com que para testá-la, você precise de alguma
ferramenta extra.Além disso, o objeto apos instanciado passa a não ser
utilizavel (você tem que saber que precisa injetar coisas privadas
antes de utiliza-lo!).

Como campos privados injetaveis apresentam essas desvantagens de
design, ainda na versão 2 movemos de anotações para construtor.
Portanto não recomendo o uso de anotações dessa maneira para campos
que devem ser injetados, mas se você precisar tenho a impressão que
alguns providers que dão suporte a esse tipo de injeção farão isso
para você, utilizando as anotaçnoes devidas desse provider.

Abraço

Guilherme Silveira
Caelum | Ensino e Inovação
http://www.caelum.com.br/

2011/2/22 Sfalsin, Marcio <mar...@objetivasistemas.com>:

> "caelum-vraptor" group.
> To post to this group, send email to caelum-...@googlegroups.com.
> To unsubscribe from this group, send email to
> caelum-vrapto...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/caelum-vraptor?hl=en.
>

Lucas Cavalcanti

unread,
Feb 22, 2011, 9:13:23 AM2/22/11
to caelum-...@googlegroups.com
Como o Guilherme disse, não é muito recomendado fazer injeção direto no field, mas você pode forçar essa
injeção (ou até injeção por setter e método) usando a anotação @javax.inject.Inject

@Inject
private Result result;

@Inject
public void setResult(Result result) {...}

@Inject
public void init(Result result, UsuarioDao dao) {...}

Abraços
Lucas

2011/2/22 Guilherme Silveira <guilherme...@caelum.com.br>
Reply all
Reply to author
Forward
0 new messages