Как составить пользовательскую аннотацию в Java с аннотацией @Inject - PullRequest
2 голосов
/ 07 января 2012

Я видел это несколько раз при просмотре .. люди используют @Inject собственную аннотацию для добавления EntityManager, например:

@Inject @MyEm EnityManager em;  

потому что вы не можете просто ввести EntityManager. Вы можете сделать это только с @PersistenceContext. Кто-нибудь знает, как заставить это работать (с пользовательской аннотацией), потому что я не нашел никакой информации в сети? Приведите пример, если можете, пожалуйста.

Ответы [ 2 ]

3 голосов
/ 07 января 2012

По сути, вам нужно создать аннотацию дискриминатора и использовать ее вместе с продюсером.Это позволяет вам просто @Inject вашего Entity Manager в других bean-компонентах внутри вашего приложения Java EE.Вот пример:

@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;
}
2 голосов
/ 07 января 2012

Это называется "классификатор".Каждый CDI учебник должен объяснить о них.Вкратце:

  • создайте собственную аннотацию и добавьте к ней аннотацию @Qualifier
  • , используйте аннотацию квалификатора в ваших конкретных классах, которые реализуют некоторый интерфейс, или в методах производителя, которые создаютэкземпляр
  • использует вашу пользовательскую аннотацию в точке внедрения, чтобы различать две или более реализации интерфейса
...