segunda-feira, 17 de junho de 2013

Spring - Parte 3

Vamos continuar a explorar o constructor injection. Neste post vamos entender um pouco mais o que as tags do arquivo de configuração XML.

Veremos que a resolução dos argumentos do Construtor é feita de acordo com o tipo do argumento. Por exemplo na nossa classe Quadrado o construtor é

public Quadrado(Point p, int lado)

os argumentos são Point p e int lado. Como os dois tipos são diferentes, é fácil para o Spring saber qual é o ponto p e qual é o lado (inteiro).

Se existir qualquer ambiguidade nos argumentos do construtor, a ordem em que os argumentos são definidos no construtor é considera de acordo com a ordem pela qual estes argumentos são fornecidos no arquivo de configuração. Por exemplo, para a classe java.awt.Point o construtor é

Point(int x, int y) 

os dois argumentos são inteiros, portanto o Spring utiliza a ordem para definir os argumentos. Assim no arquivo de configuração

<bean class="java.awt.Point"> 
  <constructor-arg value="250" />
  <constructor-arg value="100" />
</bean>
o primeiro argumento x é atribuído o valor 250 e segundo argumento y é atribuído o valor 100.
Se invertermos as duas linhas

<bean class="java.awt.Point"> 
  <constructor-arg value="100" />
  <constructor-arg value="250" />
</bean>

o primeiro argumento x é atribuído o valor 100 e segundo argumento y é atribuído o valor 250.

Vamos ver neste post 2 vídeos:

a) Tags para criação do bean

b) Exemplo de utilização

domingo, 16 de junho de 2013

Spring - Parte 2

O framework do Spring trabalha com o conceito de Injeção de Dependência (DI - Dependency Injection) o que diminui o acoplamento entre as classes.

Existem três formas para realizar DI:

  • Injeção por construtor (Constructor Injection)
  • Injeção por setter (Setter Injection)
  • Injeção por interface (Interface Injection)

A injeção por setter é a forma mais utilizada e trataremos dela com mais detalhes em outros posts. A injeção de interface não é implementada por Spring e por este motivo não falaremos mais dela.

Neste vídeo conheçaremos a ver a primeira opção - Constructor Injection. Particularmente eu não utilizou muito esta opção, pois temos muito mais flexibilidade com o setter injection e algumas vezes pode haver confusão com os argumentos na construção.

Neste caso os objetos são instanciados mediante a configuração dos argumentos passados para o construtor do objeto a ser criado.

Espero que o exemplo apresentado o vídeo tenha deixado claro a vantagem da injeção de dependência, uma vez que pudemos variar a posição (e também poderíamos ter alterado o tamanho) do quadrado na tela somente trocando o arquivo de configuração. Com a DI, não houve necessidade de alteração na classe e de geração de novo bytecode quando na verdade somente precisávamos alterar alguns parâmetros.

É importante destacar ainda que criamos um objeto tipo java.awt.Point de dentro do arquivo de configuração, que foi injetado no Quadrado. Esta classe não precisou de nenhuma linha em Java para ser criada.

Existe muita discussão sobre o uso de DI, um resumo pode ser visto na figura abaixo. Trataremos deste assunto novamente quando já tivermos visto mais sobre Spring.