Olá. Quero uma opinião do povo do GUJ. Comecei a pouco tempo estudar Spring, mas me veio umas dúvidas. Estou estudando a partir da documentação e a partir de alguns exemplos espalhados por aí. Fiz um exemplo aqui bem básico. Um DAO de Usuário com básico para um CRUD(salvar, alterar, remover e listar). Criei uma interface UsuarioDAO e uma implementação dessa interface(UsuarioJpaDAO). Essa classe, a UsuarioJpaDAO recebe pelo construtor o EntityManager. Está funcionando perfeitamente tudo, mas minha dúvida é em relação ao BeanFactory e a arquitetura que estou utilizando. Atualmente para criar uma instância do meu UsuarioDAO eu faço o seguinte:
(...)
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
UsuarioDAO usuarioDao = factory.getBean(UsuarioDAO.class);
usuarioDao.pesquisarTodos(usuario);
(...)
Aí ele cria uma instância do UsuarioJpaDAO numa boa, está funcionando perfeitamente. Mas o problema é. Acho que ficar espalhando a linha “BeanFactory factory = new ClassPathXmlApplicationContext(“applicationContext.xml”);” por todo o código é tosco. Então pensei que posso criar uma Factory para ele e daí o código ficaria desta maneira por exemplo:
(...)
BeanFactory factory = MinhaFactory.getBeanFactory();
UsuarioDAO usuarioDao = factory.getBean(UsuarioDAO.class);
usuarioDao.pesquisarTodos(usuario);
(...)
Porém. Aí me vem outro possível problema. Me falaram(não sei se a pessoa estava certa) que uma das vantagens em utilizar o Spring era me livrar do “DAOFactory”. Mas eu pensei que nesse caso eu poderia ter uma DAOFactory e reduzir o código ainda mais e não seria uma vantagem “me livrar dele”:
(...)
UsuarioDAO usuarioDao = DAOFactory.getUsuarioDAO();
usuarioDao.pesquisarTodos(usuario);
(...)
Daí o DAOFactory ficaria algo como:
public class DAOFactory {
private static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
public static UsuarioDAO getUsuarioDAO() {
return factory.getBean(UsuarioDAO.class);
}
}
Mas usando o Spring somente para isso, não vi uma vantagem tão clara em cima de utilizar somente DAOFactory em Spring. Acredito que a vantagem nesse caso seria em relação em ter o Spring fazendo o controle Transacional e outras coisas mais.
Mas então. Falando tudo isso quero perguntar. Vocês acham que a forma que eu estou trabalhando com o Spring no meu exemplo(utilizando uma DAOFactory) é a melhor forma de trabalhar com ele mesmo? Existem outras formas melhores de trabalhar com o Spring? Sei que isso que postei é o básico do básico, mas quero saber desde já como a maioria das pessoas trabalham com ele. Se alguém puder analisar meu exemplo e meu dizer se o caminho que estou seguindo é o mais correto eu agradeço. 