Melhor forma de utilizar Spring

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. :slight_smile:

estude sobre a injecao de dependecia do Spring… com certeza vai facilitar usa vida… e nao tera que fazer esse esquema que voce esta fazendo para criar referencias… eh so anotar e pronto. voce tera uma instancia para seu objeto…

É verdade, o esquema é usar o container do Spring pra ele fazer as injeções.

public class Service {

  private UsuarioDAO usuarioDAO;

// criar setter/getter (ou usarr injeção por construtor)

}

Aí vc usa o Spring para injetar o seu DAO no Service. Essa injeção pode ser feita através de xml ou annotations, fica a sua escolha.

Dessa maneira vc deve ficar com a sua aplicação dependendo do contexto do Spring em somente um lugar (Onde vc estiver fazendo o bootstraping).