Desculpem as dúvidas bobas, mas gostaria de confirmar meu raciocínio.
No código abaixo, como o CDI sabe instanciar a interface EntityManager?
public class AutorDao implements Serializable{
@Inject
EntityManager em;
private DAO<Autor> dao;
@PostConstruct
void init() {
this.dao = new DAO<Autor>(this.em, Autor.class);
}
//outros métodos omitidos
}
É por causa do retorno do método getEntityManager
do JPAUtil?
public class JPAUtil {
private static EntityManagerFactory emf = Persistence
.createEntityManagerFactory("livraria");
@Produces
@RequestScoped
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
public void close(@Disposes EntityManager em) {
em.close();
}
}
Outra dúvida seria com relação ao DAO genérico. Esse não está no contexto do CDI, pois ele é instanciado normalmente com new
. Isso é por causa do construtor. Não existe um construtor padrão e por isso foi utilizado essa técnica. Porém, a minha dúvida é com relação à se estamos utilizando o CDI, não seria interessante desenvolvermos voltado a ele, ou seja, o ideal é implementarmos tudo com construtor padrão para que o CDI controle todos os objetos da nossa aplicação. Não seria melhor utilizarmos esse DAO genérico de um outro jeito de modo que o CDI o controle?