java - 接口(interface)的变量在JAVA中是如何工作的,如何调用接口(interface)的方法?

标签 java jakarta-ee interface entitymanager

我知道以下所有 Java 接口(interface)规则:

  1. 您不能实例化接口(interface)。
  2. 接口(interface)不包含任何构造函数。
  3. 接口(interface)中的所有方法都是抽象的。
  4. 接口(interface)不能包含实例字段。唯一可以出现在接口(interface)中的字段必须同时声明为静态和最终。
  5. 接口(interface)不被类扩展;它由一个类实现。
  6. 一个接口(interface)可以扩展多个接口(interface)。

现在我的问题是我们如何创建接口(interface) EntityManager 的变量并使用它的方法,如下面给定的代码:

import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateful
public class Movies {

    @PersistenceContext(unitName = "movie-unit")
    private EntityManager em;   // Here declaring a variable of an Interface

    public void addMovie(Movie movie) throws Exception {
        em.persist(movie);      // Here using variable of an Interface to call its method
    }
}

请阐明这一点,以便我可以清楚地理解这段代码是如何工作的!

最佳答案

您在这里没有创建任何东西,容器才是。您所做的只是声明一个要注入(inject)的依赖项,这就是 DI 在 JavaEE 中的工作方式。正在发生的事情的一个非常简单的 View :

  • 您的电影 EJB 是proxied通过容器

  • 代理会反省您的类并发现您声明的注解,以及您声明它的字段

  • 容器向代理提供 EntityManager 的实例,这反过来又使其可用于您的实现。

Presto:即时 EntityManager。注意到您在这个过程中的参与度有多低?

关于java - 接口(interface)的变量在JAVA中是如何工作的,如何调用接口(interface)的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25063608/

相关文章:

f# - F# 中的泛型和接口(interface)

java - `MediaStore.MediaColumns.DATA` 已弃用,我应该使用哪一列作为替代

Java SE + NetBeans - 如何将文本字段分配给 UI 生成器中的数组?

java - 浏览器特定的 session 管理

jakarta-ee - 在 JBoss 中替换 Websphere 的 WorkManager?

java - 我需要 Web/JavaEE 容器中的线程来完成同一 JVM 中的 AsyncContext 对象

kotlin - 限制 Kotlin 中伴随对象的类型

c# - 接口(interface)实例化与类实例化

java - 迭代自定义哈希表

java - Apache CXF 拦截器配置