Injection - A capacidade do
JBoss Seam de atribuir uma referência válida para um objeto (Seam Component) num atributo de outro componente. Esta capacidade é realizada através das anotações
@In e
@DataModelSelection, por exemplo. Quando o Seam encontra estas anotações num atributo de um Seam Component, localiza um objeto num dos contextos com o nome indicado e injeta no atributo.
Outjection - Que também podemos chamar de ejeção, é a capacidade do JBoss Seam de expor um objeto referenciado por um atributo de um Seam Component num dos contextos do Seam. Ejetar significa o Seam pegar a referência para um objeto armazenado num atributo privado de um Seam Component e armazenar num dos contextos com um nome associado. Ao expor o atributo, mesmo privado, este estará disponível para injeção em outros Seam Components via
injection ou para acesso via
Expression Language (EL) numa tela JSF. Esta capacidade é realizada pelo Seam através da anotação
@Out. Contudo, no momento de ejetar um atributo como Seam Component num dos contextos, o Seam pode realizar alguma transformação do objeto como, por exemplo, na anotação
@DataModel onde o Seam encapsula uma lista de objetos num JSF Data Model antes de armazená-lo no contexto. Assim, quando o usuário seleciona um item num Data Table numa tela JSF, o JSF sabe qual objeto foi selecionado e o Seam recupera este objeto para injetar num outro atributo do Seam Component que foi marcado com a anotação
@DataModelSelection.
Sobre os contextos do Seam escrevi os posts
Sobre os contextos do JBoss Seam e
Seam Contexts Ilustrados. Neste último post cito a diferença entre
Context Variable e
Instance Variable. Considerando estes dois conceitos, podemos definir como injeção o movimento realizado pelo Seam de uma referência para um objeto do
Context Variable para o
Instance Variable. Já ejeção significa o movimento de um
Instance Variable para um
Context Variable. Nestes movimentos, o Seam pode realizar transformação dos objetos.
- Anotações que realizam injeção: @In e @DataModelSelection.
- Anotações que realizam ejeção: @Out, @DataModel, @Factory e @Name.
Then, any issue let me know! Post comments!