Informática -> Struts 2 - AJAX - JPA - Spring - Pate V


Struts 2 + AJAX + JPA + Spring – Parte V

Integrando o Spring com Struts 2 + JPA

Bem, como visto ate agora, nossas actions irão utilizar as classes LoginImpl e ContatoImpl para poderem acessar o banco de dados.

Injeção de Dependências

Agora vamos ver como a dependência de nossos objetos serão injetadas pelo Spring.

Nossos serviços de dados terão seus atributos que são referencias a classes daos instanciados pelo spring, logo nossas classes daos terão sua dependência que no caso delas é o EntityManagerFactory que é o objeto que tem carregado todas a informações e meios de acesso ao banco de dados também instanciado pelo spring.

O Spring age como um container que fabrica seus objetos a partir de um arquivo de configuração, embora esta nova versão do spring já possua suporte a annotations este artigo não engloba este tópico, deixaremos para a próxima.

Existem algumas maneiras para realizar a injeção de dependências, neste artigo iremos abordar os dois estilos que são:

Constructor Injection : é quando a injeção da dependência é realizada pelo construtor da classe, utilizando uma referência do objeto a ser passado como abaixo:

<bean id="contatoDao" class="br.jm.persistencia.ContatoDAO">

<constructor-arg ref="entityManagerFactory">constructor-arg>

bean>

Aqui nosso construtor da classe ContatoDAO receberá uma referencia ao bean entityManagerFactory.

Setter Injection : é quando o container, no nosso caso o Spring, utiliza do método set da propriedade para realizar a atribuição por valor da propriedade, como no exemplo abaixo:

<bean id="removeContato" class="br.jm.actions.RemoverContatoAction" scope="prototype">

<property name="servico" value="servicoContato">property>

bean>

No bean removeContato é atribuído por valor utilizando o método set do atributo servico o valor do bean servicoContato

É com a tag que iremos configurar o spring, esta tag é inserida dentro do elemento raiz configurado no arquivo applicationContext.xml que deve ser criado dentro do seu diretório nomeProjeto/WebContent/WEB-INF/

Vamos ver primeiramente a classe LoginIml que implementa a interface LoginIF que esta na listagem 16.

package br.jm.servico;

public interface LoginIF {

public Boolean valida(String login, String senha);

}

Listagem 16 – LoginIF.java

Esta interface possui somente um método que retorna um boolean e recebe duas strings, o login e a senha do usuário, agora vamos a ver a sua implementação de acordo com a listagem 17.

package br.jm.servico;

import br.jm.persistencia.LoginDAO;

public class LoginImpl implements LoginIF {

private LoginDAO loginDAO;

public LoginImpl() {

}

public LoginImpl(LoginDAO loginDAO) {

this.loginDAO = loginDAO;

}

public Boolean valida(String login, String senha) {

return this.loginDAO.validaLogin(login, senha);

}

//métodos getters e setters

}

Listagem 17 - LoginImpl

Como a classe LoginImpl possui um atributo loginDAO e este será injetado pelo Spring então temos que declarar um construtor default e um construtor recebendo um LoginDAO caso iremos utilizar uma injeção do tipo constructor injection que é quando se recebe uma referência do objeto no construtor.

Para que não ocorra erros utilizando o spring é necessário que o atributo loginDAO tenha seus métodos getters e setters. Nos iremos configurar o spring para que este instancie e injete qualquer dependências desses objetos.

Agora vamos ver a classe ContatoImpl que implementa a interface ContatoIF como pode ser visto nas listagens 18 e 19.

package br.jm.servico;

import java.util.List;

import br.jm.entidade.Contato;

public interface ContatoIF {

public void salvarContato(Contato contato);

public Contato acharContato(Long id);

public List listarContatos();

public void removerContato(Long id);

public void removerContatos();

}

Listagem 18 – ContatoIF.java

package br.jm.servico;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import br.jm.entidade.Contato;

import br.jm.persistencia.ContatoDAO;

public class ContatoImpl implements ContatoIF {

private ContatoDAO contatoDAO;

public ContatoImpl() {

}

public ContatoImpl(ContatoDAO contatoDAO) {

this.contatoDAO = contatoDAO;

}

public Contato acharContato(Long id) {

return contatoDAO.acharContato(id);

}

public List listarContatos() {

List lista = new ArrayList();

List lista2 = contatoDAO.obtemListaContato();

if(lista2 != null) {

lista.addAll(lista2);

}

return Collections.unmodifiableList(lista);

}

public void removerContato(Long id) {

contatoDAO.removerContato(id);

}

public void salvarContato(Contato contato) {

contatoDAO.adiciona(contato);

}

public void removerContatos() {

contatoDAO.removeContatos();

}

Listagem 19 – ContatoImpl.java

Fonte:
Struts 2 + AJAX + JPA + Spring – Parte V