Um container de IoC baseado na implementação do Mentawai, bastante simples de usar, configurar e entender. Suporta Wiring, Injection, Singleton, Factories, etc.
:arrow: Isso é a minha opinião pessoal. Você também pode ter a sua.
:arrow: Vou começar pela [color=blue]vantagem[/color] de usar annotation: ela relaciona a configuração ao configurado, ou seja, ambos ficam num mesmo lugar, sendo mais fácil para você saber qual a configuração de um elemento X pois sua configuração está logo ali em cima.
Agoras as [color=red]desvantagens[/color]:
:arrow: Espalha a configuração pelo código inteiro, ao invés de deixá-la organizada em um arquivo central.
:arrow: Uma alteração na configuração vai forçar um full re-deploy da aplicação, ou seja, você vai ter que gerar o war / jar de novo e fazer o re-deploy.
:arrow: Anotação polui o código. Quando você lê um livro você prefere as páginas limpas ou cheias de anotações? Eu prefiro o texto limpinho, sem uma anotação a cada parágrafo.
:arrow: Anotação não é documentação como eu já ouvi gente falando. Anotação é código. Só que é um código meia-boca, cheio de limitações.
:arrow: Anotação muitas vezes se torna um remendo de código para corrigir alguma limitação da linguagem. Por exemplo: named method parameters.
:arrow: A alternativa é configuração programática, sem XML e anotações. Ela pode ficar separada da aplicação, ser compilada a parte, etc. E a configuração estática dentro dela (nome do banco, usuário, etc) pode ficar separada num arquivo properties.
Sergio, considere usar Groovy ou JRuby para simplificar a configuracao. Em vez de voce ter uma classe especifica que fica num pacote especifico, voce pode criar uma pseudo-DSL pra IoC.
Nao que eu ache uma boa ideia a criacao desse framework… mas todos nos somos livres pra criar o que nos bem entendermos
E veja que wiring por construtor não faz sentido, pois quando vc interliga os componentes eles já devem estar inicializados e o container não tem como calcular de anti-mão todas as dependências para chamar um construtor. Ele vai injetando conforme vai encontrando dependências. Isso é auto-wiring (no caso do MentaContainer por nome e type).
Algum motivo em especial para preferir via setter?
Digo isso por que eu implementei um container de DI para Delphi onde suporto apenas injeção pelo construtor (o projeto é novo… eventualmente posso implementar isso), e queria saber quais as vantagens de fazer injeção pelo setter.
Inicialmente eu suportava injeção diretamente nos campos do objeto (ou seja, sem passar pelo construtor nem pelos setters), mas depois descartei isso pois vi que era furada trabalhar assim