Pessoal, boa tarde.
Estou analisando um projeto existente onde trabalho e estou com dúvidas sobre injeção de dependências… Está um bocado confuso.
Existe o seguinte cenário:
public interface DAOFactory {}
public class DAOFactoryImpl implements DAOFactory {
Na classe DAOFactoryImpl é implementado os métodos da superclasse. Nessa classe, são criadas instâncias das classes DAO específicas para cada entidade no banco e as mesmas são armazenadas em um map. Segue um exemplo abaixo:
public EmpresaDAO getEmpresaDAO() {
String chave = EmpresaDAO.class.getName();
if (!mapa.containsKey(chave)) {
mapa.put(chave, new EmpresaDAOImpl(entityManager));
}
return (EmpresaDAO) mapa.get(chave);
}
Dito isso, há uma classe controladora, “EmpresaControlador”, que é responsável por realizar as chamadas ao banco de dados para salvar, recuperar, etc. Essa classe extende a “GenericoControlador”. A minha dúvida é sobre essa última classe… Nela há o seguinte trecho:
@EJB
protected DAOFactory daoFactory;
A classe “EmpresaControlador” herda o membro daoFactory acima obviamente. Porém, o que realmente aconteceu com a utilização do @EJB?? Como é possível que a classe “EmpresaControlador” consiga chamar o método específico correto para salvar no banco? E também achei super estranho realizar injeção em uma referência a uma interface! Espero ter conseguido expressar minha dúvida corretamente… pois está tão confuso que nem consigo explicar direito…
Quem puder dar um help ficaria agradecido!