MentaContainer: IoC simples e rápido

Um container de IoC baseado na implementação do Mentawai, bastante simples de usar, configurar e entender. Suporta Wiring, Injection, Singleton, Factories, etc.

http://www.seducaotecnologica.com.br/mentacontainer-ioc-simples-rapido/

Uma alternativa diferente ao Spring, Guice e PicoContainer.

A filosofia é ser extremamente simples (KISS), don’t make me think, sem nunca suportar XML ou Annotations.

mais um, mais um… :roll:

É um pet project ou voce espera usar de verdade num projeto serio em producao?

Espero usar de verdade num projeto sério de produção. :roll:

Oi saoj. Qual vantagem vc percebe em não usar annotations?

saoj, foi você quem o implementou? Pretende transformá-lo em uma engine para o CDI?

Isso é uma discussão infinita, mas vamos lá:

: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.

That’s it. Enjoy! :slight_smile:

JSF não é minha praia… EJB tb não… Então provavelmente não… :slight_smile:

Na minha opiniao, a vantagem supera todas as desvantagens.

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 :slight_smile:

tsc tsc luca…

apagar comentarios já é algo complicado,

agora editar e ainda dar uma de “super engraçado” ? tsc…tsc…

Sim, mas nesse caso eu quero configurar em Java mesmo.

Claro. Eu sou livre para criar e vc é livre para usar… ou ignorar se preferir. O mercado é o melhor juiz. Em programação não há too-big-to-fail. :slight_smile:

Do que seria o EJB 3 sem as anotações …
Inviável muitas configurações em XML. Tem muuitas desvantagens!

Além de ter muitas outras vantagens, com crtz superam em muito essas desvantagens aí … !!

Vc não leu até o final:

ainda prefiro o Guice e o Pico (que tambem tem config programatica). mas parabens pela iniciativa e pela discussao do tema!

parabens pela iniciativa, precisamos mesmo de diversidade, cade os testes ? - brincadeira :twisted:

Não faz DI pelo construtor?

Sim, suporta, mas a preferencia é usar setter.

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

O que seria o wiring a que você se refere? Seria outro termo para injeção?