sirve - Cómo apilar una anotación personalizada en Java con @Inject annotation
reflection en java (2)
Lo vi varias veces al navegar ... las personas están usando la anotación @Inject
con la suya para inyectar EntityManager
esta manera:
@Inject @MyEm EnityManager em;
porque no puedes simplemente inyectar el EntityManager
. Puedes hacerlo solo con @PersistenceContext
. ¿Alguien sabe cómo hacer que esto funcione (con la anotación personalizada), porque no encontré ninguna información en la red? Da un ejemplo si puedes, por favor.
Esto se llama un "calificador". Cada tutorial de CDI debe explicar sobre ellos. En breve:
- crea tu propia anotación y
@Qualifier
con@Qualifier
- use su anotación de calificador en sus clases concretas que implementen alguna interfaz, o en métodos de productor que creen una instancia
- utilice su anotación personalizada en el punto de inyección para diferenciar entre dos o más implementaciones de una interfaz
Básicamente, lo que debe hacer es crear una anotación discriminatoria y usarla junto con un productor. Esto le permite simplemente @Inject your Entity Manager en otros beans dentro de su aplicación Java EE. Aquí hay un ejemplo:
@Qualifier
@Retention(RUNTIME)
@Target(METHOD, FIELD, PARAMETER, TYPE)
public interface @MyEm {
}
public class EntityProducer {
@PersistenceContext(unitName = ''MyPU'', type = PersistenceContextType.EXTENDED)
private EntityManager entityManager;
@Produces
@MyEm
public EntityManager getEntityManager() {
return entityManager;
}
}
public class MyDAO {
@Inject
@MyEm
private EntityManager entityManager;
}