我想知道JNDI和Spring有什么关系?spring 是 JNDI 的高级版本吗?两者都用于从字符串名称创建对象。我们可以说对于 JNDI 来说,一个应用服务器是提供命名服务的必要条件吗?另一方面,对于 Spring,我们可能不需要应用程序服务器,因此它可以在 Java SE 中使用?
最后,我们可以将 JMX 放在 JNDI 和 Spring 之间的这种关系上吗?低层有一些共同的逻辑吗?
只是为了澄清一些定义:
JNDI 主要是一组 Java 接口,它们定义了命名系统在 Java 中的工作方式,从而可以将一组不同的服务抽象为一个简单的 JNDI 接口。例如,文件系统、LDAP 服务器和 DNS 服务器都可以作为 JNDI 服务进行访问。
Enterprise Java (Java EE) 广泛使用 JNDI 将对象存储在一个公共地址中,其他服务可以通过名称找到它们。JNDI 不需要应用程序服务器,但 Java EE 应用程序服务器几乎总是需要(并提供)JNDI 服务。
Spring 不是 JNDI 实现,不需要JNDI,但确实支持它,这意味着您可以在 Spring 容器中启动 JNDI 服务,访问基于 JNDI 的资源并使用 Spring 内置的 JNDI 支持类。
JMX 定义了一个关于如何向 Java 应用程序提供管理接口、工具和运行时“透明度”的标准。JNDI 和 JMX 之间没有太多重叠,除了 JMX 远程连接器经常以 java 远程对象的形式构建并绑定到 JNDI 服务(以便远程客户端可以查找它们并连接到 JMX 托管应用程序)。
Spring不需要JMX,但在其框架库中提供了对它的支持,这通常用作将基于 JMX 的服务添加到 Spring 托管应用程序或服务的简化方法。
听起来您不需要JNDI,正如您所说,如果您的应用程序将基于 Spring 管理的 Java SE,那么您将有一些相当专业的要求来调用 JNDI。
至于 JMX,Spring 确实使将 JMX“工具”添加到 Spring 管理的 Java SE 应用程序变得相当容易。我的观点:我觉得(并且可能是错误的)你需要在解决这个问题之前发展更多的专业知识,因为这对你来说可能是一个严重的偏离轨道。