我想知道JNDI和Spring之间的关系是什么? Spring是JNDI的高级版本吗?两者都用于从字符串名称创建对象。 我们可以说For JNDI是一个提供命名服务的应用服务器吗? 另一方面,对于Spring,我们可能不需要Application服务器,因此可以在Java SE中使用它?
最后我们可以将JMX放在JNDI和Spring之间的这种关系上吗?在低级别有一些共同的逻辑吗?
答案 0 :(得分:5)
只是为了澄清一些定义:
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,但在其框架库中提供对它的支持,这经常被用作向Spring托管应用程序或服务添加基于JMX的服务的简化方法。
听起来并不像需要 JNDI,正如您所说,如果您的应用程序将基于Spring管理的Java SE,那么您将需要一些相当专业的要求来调用JNDI。 / p>
对于JMX,Spring确实可以很容易地将JMX“instrumentation”添加到Spring托管的Java SE应用程序中。 我的观点 :我觉得(并且可能是错的)你需要在解决这个问题之前提高一些专业知识,因为这可能是一个严重的偏见。