DUBBO-465 同样给Monitor单例缓存也加上group和version信息
diff --git a/dubbo-monitor/dubbo-monitor-api/src/main/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactroy.java b/dubbo-monitor/dubbo-monitor-api/src/main/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactroy.java
index 82198da..3a28b02 100644
--- a/dubbo-monitor/dubbo-monitor-api/src/main/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactroy.java
+++ b/dubbo-monitor/dubbo-monitor-api/src/main/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactroy.java
@@ -21,9 +21,11 @@
 import java.util.concurrent.ConcurrentHashMap;

 import java.util.concurrent.locks.ReentrantLock;

 

+import com.alibaba.dubbo.common.Constants;

 import com.alibaba.dubbo.common.URL;

 import com.alibaba.dubbo.monitor.Monitor;

 import com.alibaba.dubbo.monitor.MonitorFactory;

+import com.alibaba.dubbo.monitor.MonitorService;

 

 /**

  * AbstractMonitorFactroy. (SPI, Singleton, ThreadSafe)

@@ -43,10 +45,11 @@
     }

 

     public Monitor getMonitor(URL url) {

+    	url = url.setPath(MonitorService.class.getName()).addParameter(Constants.INTERFACE_KEY, MonitorService.class.getName());

+    	String key = url.toServiceString();

         LOCK.lock();

         try {

-            String uri = url.toIdentityString();

-            Monitor monitor = MONITORS.get(uri);

+            Monitor monitor = MONITORS.get(key);

             if (monitor != null) {

                 return monitor;

             }

@@ -54,7 +57,7 @@
             if (monitor == null) {

                 throw new IllegalStateException("Can not create monitor " + url);

             }

-            MONITORS.put(uri, monitor);

+            MONITORS.put(key, monitor);

             return monitor;

         } finally {

             // 释放锁

diff --git a/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactoryTest.java b/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactoryTest.java
new file mode 100644
index 0000000..c7da8e4
--- /dev/null
+++ b/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactoryTest.java
@@ -0,0 +1,79 @@
+/*

+ * Copyright 1999-2011 Alibaba Group.

+ *  

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *  

+ *      http://www.apache.org/licenses/LICENSE-2.0

+ *  

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+package com.alibaba.dubbo.monitor.support;

+

+import junit.framework.Assert;

+

+import org.junit.Test;

+

+import com.alibaba.dubbo.common.URL;

+import com.alibaba.dubbo.common.utils.NetUtils;

+import com.alibaba.dubbo.monitor.Monitor;

+import com.alibaba.dubbo.monitor.MonitorFactory;

+

+/**

+ * AbstractMonitorFactoryTest

+ * 

+ * @author william.liangf

+ */

+public class AbstractMonitorFactoryTest {

+    

+    private MonitorFactory monitorFactory = new AbstractMonitorFactroy() {

+        

+        protected Monitor createMonitor(final URL url) {

+            return new Monitor() {

+

+				public URL getUrl() {

+					return url;

+				}

+

+				public boolean isAvailable() {

+					return true;

+				}

+

+				public void destroy() {

+				}

+

+				public void collect(URL statistics) {

+				}

+

+            };

+        }

+    };

+    

+    @Test

+    public void testMonitorFactoryCache() throws Exception {

+        URL url = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostAddress() + ":2233");

+        Monitor monitor1 = monitorFactory.getMonitor(url);

+        Monitor monitor2 = monitorFactory.getMonitor(url);

+        Assert.assertEquals(monitor1, monitor2);

+    }

+    

+    @Test

+    public void testMonitorFactoryIpCache() throws Exception {

+        Monitor monitor1 = monitorFactory.getMonitor(URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":2233"));

+        Monitor monitor2 = monitorFactory.getMonitor(URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostAddress() + ":2233"));

+        Assert.assertEquals(monitor1, monitor2);

+    }

+

+    @Test

+    public void testMonitorFactoryGroupCache() throws Exception {

+        Monitor monitor1 = monitorFactory.getMonitor(URL.valueOf("dubbo://" + NetUtils.getLocalHost() + ":2233?group=aaa"));

+        Monitor monitor2 = monitorFactory.getMonitor(URL.valueOf("dubbo://" + NetUtils.getLocalHost() + ":2233?group=bbb"));

+        Assert.assertNotSame(monitor1, monitor2);

+    }

+

+}
\ No newline at end of file