如何在Java中使用@Inject注解堆叠自定义注解

发布于 2024-12-25 13:29:13 字数 300 浏览 1 评论 0原文

我在浏览时多次看到这种情况..人们使用 @Inject 注释和自己的注释来注入 EntityManager ,如下所示:

@Inject @MyEm EnityManager em;  

因为你不能只注入 EntityManager.您只能使用 @PersistenceContext 来完成此操作。有谁知道如何使这项工作(使用自定义注释),因为我在网上没有找到任何信息?如果可以的话请举个例子。

I saw this several times when browsing.. people are using @Inject annotation with their own to inject EntityManager like this:

@Inject @MyEm EnityManager em;  

because you cannot just inject the EntityManager. You can do it only with @PersistenceContext. Does anybody know how to make this work (with the custom annotation), because I didn't find any information on the net? Give a example if you can, please.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

何以心动 2025-01-01 13:29:13

基本上,您需要做的是创建一个鉴别器注释并将其与生产者结合使用。这允许您在 Java EE 应用程序中的其他 bean 中简单地 @Inject 实体管理器。这是一个例子:

@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;
}

Basically what you need to do is create a discriminator annotation and use it in conjunction with a Producer. This allows you to simple @Inject your Entity Manager in other beans within your Java EE application. Here is an example:

@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;
}
清旖 2025-01-01 13:29:13

这称为“限定符”。每个 CDI 教程都应该解释它们。简而言之:

  • 创建您自己的注释,并使用 @Qualifier 对其进行注释
  • 在实现某些接口的具体类上使用您的限定符注释,或者在创建实例的生产者方法上
  • 在注入点使用您的自定义注释区分接口的两个或多个实现

This is called a "qualifier". Every CDI tutorial should explain about them. In short:

  • create your own annotation, and annotate it with @Qualifier
  • use your qualifier annotation on your concrete classes that implement some interface, or on producer methods that create an instance
  • use your custom annotation at the injection point to differentiate between two or more implementations of an interface
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文