いくつかの定義を明確にするために:
- Spring:Spring Frameworkは、オープンソースのアプリケーションフレームワークであり、制御の反転コンテナです。
- JNDI:Java Naming and Directory Interfaceは、Javaソフトウェアクライアントが名前を介してデータとオブジェクトを検出および検索できるようにするディレクトリサービス用のJavaAPIです。
- JMX:Java Management Extensions(JMX)は、アプリケーション、システムオブジェクト、デバイス(プリンターなど)、およびサービス指向ネットワークを管理および監視するためのツールを提供するJavaテクノロジです。
JNDIは主に、さまざまなサービスのセットを単純なJNDIインターフェースに抽象化できるように、Javaでネーミングシステムがどのように機能するかを定義する一連のJavaインターフェースです。たとえば、ファイルシステム、LDAPサーバー、およびDNSサーバーはすべてJNDIサービスとしてアクセスできます。
Enterprise Java(Java EE)は、JNDIを広範囲に使用して、他のサービスが名前でオブジェクトを見つけることができる共通のアドレスにオブジェクトを格納します。JNDIはアプリケーションサーバーを必要としませんが、Java EEアプリケーションサーバーはほとんどの場合JNDIサービスを必要とします(そして提供します)。
SpringはJNDI実装ではなく、JNDIを必要としませんが、それをサポートします。つまり、SpringコンテナーでJNDIサービスを開始し、JNDIベースのリソースにアクセスし、Springの組み込みJNDIサポートクラスを使用できます。
JMXは、Javaアプリケーションに管理インターフェース、インストルメンテーション、およびランタイムの「透過性」を提供する方法に関する標準を定義しています。JMXリモートコネクタがJavaリモートオブジェクトの形式で頻繁に構築され、JNDIサービスにバインドされることを除いて、JNDIとJMXの間に大きな重複はありません(リモートクライアントがそれらを検索してJMX管理対象アプリケーションに接続できるようにするため)。
SpringはJMXを必要としませんが、フレームワークライブラリでJMXをサポートします。これは、Springが管理するアプリケーションまたはサービスにJMXベースのサービスを追加するための簡略化された手段として頻繁に使用されます。
JNDIが必要なようには思えません。おっしゃるように、アプリケーションがSpring管理のJava SEベースになる場合は、JNDIを呼び出すためのかなり特殊な要件があります。
JMXに関しては、Springを使用すると、Springで管理されているJavaSEアプリケーションにJMXの「インストルメンテーション」を簡単に追加できます。私の意見:これに取り組む前に、もう少し専門知識を身に付ける必要があると感じています(そして間違っている可能性もあります)。これはあなたにとって深刻な副産物になる可能性があるからです。