diguix:
sergiotaborda wrote
Fazer um IoC container é trivial e é muito bom para entender reflection.
Se vc pretender usar Annotations tanto melhor. O que não é trivial é fazer um bom IoC. Mas se é para estudo/faculdade é com certeza mais util que um programa de locadora.
Então ja andei olhando por ai e tal mas não achei código ou algo do gênero para começar a não ser os fontes de projetos já existentes …
…alguma dica ??
não ha muito a fizer. Os IoC são factories que constroem objetos. No estilo Spring a definição da injeção ( qual objeto é populado com quais outros objetos) fica em um arquivo. No estilo Guice (lê-se juice) são usadas anotações.
O estilo guice é muito mais moderno mas tem o problema - no caso do juice - de ficar amarrado a anotações especificas.
Se por exemplo vc quiser incorporar o guice em outro sistema ou framework vc teria que usar as anotações do juice não sendo possivel encapsulá-lo. Isso vc resolve facilmente criando um mecanismo configuração de quais anotações fazem o quê.
Todo o ponto dos containers é criar objetos. Para isso eles usam a Class e os usam reflection para ler os contrutores. Um deles deve ser anotado para ser chamado. Se ele não tem parametros, otimo. Se tem, o container irá criar esses outros objetos com o mesmo mecanismo e depois chamar o construtor já com esses objetos criados. É facil entender daqui que é o processo é recursivo até que o objeto principal possa ser criado. Isso implica também que pode existir recursividade cíclica, que é algo que não é trivial resolver.
Depois do objeto criado ele pode ser mantido em memoria ou não. Se não, ele será criado de novo da proxima vez.
O esquema de manter em memoria é oferecido pelo Guice de forma configurável. Vc decide onde como o objeto é guardado. O default é criar um novo a cada pedido. O spring cria um so e mantem na memoria interna por padrão.
Estes objetos que são criados e mantidos na memoria são chamados ( erroneamente) de singletons pelos frameworks de injeção.
Por outro lado o container terá dificuldades em criar todos os tipos de objeto. (por exemplo, String é dificil). Ele será obrigado a abdicar da construção de certos tipos ou a delegar essa construção. Aqui o IoC vira uma fabrica que chama outras fábricas.
Na realidade o IoC é apenas isso, um Factory turbinado que cria tudo sozinho… ou quase.