JMX is good way to expose parts of your application for monitoring and management. Spring also provides support for exposing JMX for remote management (JSR-160) and creating a client to manage it. This example registers a Spring bean as a JMX MBean, exposes the JMX server over JMX Messaging Protocol (JMXMP), and creates a client to access it.
        To connect to the example using a JMX Management tool, JConsole can be used and comes with the JDK installation.
        In the IDE a break point could be set in the unit test or Thread.sleep 
        could be added to pause the application from shutting down.  To activate local JMX access, the Java argument 
        -Dcom.sun.management.jmxremote must be used when starting the test.
        
        
$ jconsole
            The context:component-scan creates a Spring bean from the ServerManagerImpl. 
            The context:mbean-export element will register any annotation beans as JMX MBeans.
        
The serverConnector bean will expose JMX for remote management over JMXMP.
            The clientConnector creates a remote reference as an MBeanServerConnection.  
            From this MBeanInfo can be retrieved for different JMX MBeans.  But even more convenient is to 
            create a proxy of the MBean using the MBeanProxyFactoryBean.  This creates a remote proxy to the 
            MBean specified by the p:objectName attribute, and uses the p:proxyInterface 
            attribute to set what interface should be used for the proxy.
        
                
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context 
                           http://www.springframework.org/schema/context/spring-context.xsd">
 
    <context:component-scan base-package="org.springbyexample.jmx" />
    
    <context:mbean-export/>
    <!-- Expose JMX over JMXMP -->
    <bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean" />
    <!-- Client connector to JMX over JMXMP -->
    <bean id="clientConnector" class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean"
          p:serviceUrl="service:jmx:jmxmp://localhost:9875" />
    <!-- Client ServerManager proxy to JMX over JMXMP -->
    <bean id="serverManagerProxy" class="org.springframework.jmx.access.MBeanProxyFactoryBean"
          p:objectName="org.springbyexample.jmx:name=ServerManager"
          p:proxyInterface="org.springbyexample.jmx.ServerManager"
          p:server-ref="clientConnector" />
</beans>