Fala aí Marco, tudo bem?
nesse trecho: "Analisando o código disponibilizado, percebi que o entityManager nesta classe é chamado através do getEntityManager() do JPAUtil"
Quando você se refere "nesta classe" está falando na classe UsuarioDao
? Está dizendo ela não injeta o EntityManager e utiliza a classe JPAUtil
para conseguir um EntityManager
seria isso?
Manda o código para eu entender melhor sua dúvida e tentar te ajudar.
Respondendo as outras dúvidas,
A anotação @Produces
indica ao CDI
como produzir algum objeto, através do retorno do método anotado.
Ou seja se eu anotar um método que retorna String
com @Produces
em qualquer lugar que eu precisar injetar uma String
o CDI
vai utilizar esse método que eu anotei. (Se eu tiver mais de um método que retorna String
anotado com @Produces
preciso utilizar um outro recurso do CDI
chamado Qualifier
para distinguir quando injetar por um método ou por outro.)
Não tem relação com o ciclo de vida do JSF
o CDI
é inicializado como um Listener
de Servlet
ou seja ele é inicializado antes da Servlet
do JSF
.
Como respondido anteriormente não tem como optimizar isso pois não tem relação com a inicialização do JSF
.
Espero ter ajudado!