Dúvida DDD - injetar o Repository na classe de domínio

Bom dia pessoal,

faz um tempo que eu tinha lido este post no blog da caelum, e vários outros aqui no guj sobre DDD.

http://blog.caelum.com.br/2007/06/09/repository-seu-modelo-mais-orientado-a-objeto/

No post da caelum o Paulo e o Fábio discutiram como injetar o Repository no objeto de domínio.
Achei bacana a solução.

É assim que vocês estão fazendo hoje em dia? Ou alguém utiliza algum interceptor ou algo do tipo?

em que fim deu este post ? colocaram na prática ? o que aconteceu ? :smiley:

obrigado

Oi Ricardo,

Eu comecei o projetinho hinjector (http://sourceforge.net/projects/hinjector) justamente por isso.

Ora, se as entidades já são gerenciadas pelo Hibernate/JPA, por que não então já fazer o hibernate injetar algumas dependências?

O Hinjector é uma tentativa de prover capacidade de injeção de dependências à Session do hibernate, aproveitando os containers de DI já existentes.

Por enquanto, só com o PicoContainer: código de Exemplo.

edit: o problema é que eu estou realmente com pouquíssimo tempo para mexer nele ultimamente. Vamos ver se feveireiro sai alguma coisa.

edit2: esqueci de comentar que existem coisas similares como o HibernatePicofier e o DependencyInjectionInterceptorFactoryBean do Spring. O problema deles é que não são contextuais (não permitem injetar a Session atual) e o Hinjector deveria suportar qualquer container DI, inclusive os embutidos em frameworks web como o do vraptor e o do mentawai…

Obrigado Fábio,

vou dar uma olhada nele…

então é assim mesmo que estão fazendo né? Se eu fizer isto no DAO fica legal.

obrigado

E para hibernate + Spring, alguém conhece alguma forma de fazer essa injeção?

pq não deixar o Spring cuidar das injeções de dependencias?
qual a duvida?

[]´s

Hoje já utilizo o Spring para fazer a injeção de dependência, mas o problema é que nos objetos de domínio, que são recuperados pelo Hibernate, ainda não consegui que o Spring fizesse isso.

uma abordagem possivel seria como descrito no link do blog da Caelum.
fazer no load quando recupera o objeto.
ou quem sabe um interceptor.

[]´s

Achei o link abaixo falando sobre o assunto:

http://igorstoyanov.blogspot.com/2005/12/dependency-injection-or-service.html

Esse post é de 2005. Será que o Spring 2.5.x já possui algo que resolva o problema?

[quote=LeoNicolas]

Esse post é de 2005. Será que o Spring 2.5.x já possui algo que resolva o problema?[/quote]

Sim. É a anotação @Configurable. É DI + AOP.

Que coincidência assustadora essa sua pergunta.

Essa semana o Rafaeil Steil (aqui do GUJ/JForum) mandou um patch sensacional para o hinjector para suportar injeção com o Spring também, além do Pico que já funcionava.

Ainda estamos devendo documentação, exemplos e site, mas o Rafael já está até usando no JForum 3.

Vi a pouco que o spring 2.5 faz isso, tanto para objetos criados pela framework ORM quanto por new utilizando a anotação @Configurable.

http://static.springframework.org/spring/docs/2.5.x/reference/aop.html#aop-atconfigurable

O problema é que estou seguindo o que diz na documentação e mesmo assim ainda não consegui fazer funcionar.

Para isso funcionar, muito provavelmente você precisa habilitar instrumentação de código, ou fazer pré-compilação.

Tem em algum lugar da documentação do spring. Você vai precisar passar um argumento extra para a JVM (-javaagent spring-agent.jar).

De fato, fazer o @Configurable funcionar é um saco. Mas funfa sim.

Eu particularmente não gosto de usar o @Configurable, mas vale a pena brincar com ele. Sugiro depois dar uma olhada no fonte do spring. Depois crie sua própria anotação para então desamarrar o spring do domain :wink:

Acho que estou tendo um problema bem parecido com o título deste topico.
Será que alguem poderia ver se já passou por isso?

http://guj.com.br/posts/list/0/196803.java