From 6d981357d2f8845e3e213022e399b3c9d1080e78 Mon Sep 17 00:00:00 2001 From: oldrat Date: Mon, 30 Jul 2012 22:19:24 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=98=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/alibaba/dubbo/common/extension/ExtensionLoader.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java index eceb723fca8..4cf78782c62 100644 --- a/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java +++ b/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java @@ -108,6 +108,9 @@ private static boolean withExtensionAnnotation(Class type) { public static ExtensionLoader getExtensionLoader(Class type) { if (type == null) throw new IllegalArgumentException("Extension type == null"); + if(!type.isInterface()) { + throw new IllegalArgumentException("Extension type(" + type + ") is not interface!"); + } if(!withExtensionAnnotation(type)) { throw new IllegalArgumentException("Extension type(" + type + ") is not extension, because WITHOUT @" + SPI.class.getSimpleName() + " Annotation!"); From c494110b5f2c6636369aff51db717b08bb065e70 Mon Sep 17 00:00:00 2001 From: oldrat Date: Mon, 30 Jul 2012 22:20:51 +0800 Subject: [PATCH 2/5] =?UTF-8?q?ExtensionLoader=20UT=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../compiler/support/JdkCompilerTest.java | 28 ++ .../extensionloader/ExtensionLoaderTest.java | 412 ++++-------------- .../ExtensionLoader_Adaptive_Test.java | 308 +++++++++++++ .../common/extensionloader/NoSpiExt.java | 37 ++ .../ext1/{Ext1.java => SimpleExt.java} | 45 +- .../{Ext1Impl1.java => SimpleExtImpl1.java} | 41 +- .../{Ext1Impl2.java => SimpleExtImpl2.java} | 36 +- ...mpl_ManualAdd.java => SimpleExtImpl3.java} | 4 +- ...mpl3.java => SimpleExtImpl_ManualAdd.java} | 37 +- .../common/extensionloader/ext2/Ext2.java | 35 +- .../ext3/{Ext3.java => UseProtolKeyExt.java} | 43 +- ...t3Impl1.java => UseProtolKeyExtImpl1.java} | 40 +- ...t3Impl2.java => UseProtolKeyExtImpl2.java} | 41 +- ...t3Impl3.java => UseProtolKeyExtImpl3.java} | 41 +- .../ext4/{Ext4.java => NoUrlParamExt.java} | 43 +- .../extensionloader/ext4/impl/Ext4Impl1.java | 22 +- .../extensionloader/ext4/impl/Ext4Impl2.java | 38 +- .../extensionloader/ext5/impl/Ext5Impl1.java | 44 +- .../extensionloader/ext5/impl/Ext5Impl2.java | 44 +- .../ext5/impl/Ext5Wrapper1.java | 51 --- .../ext5/impl/Ext5Wrapper2.java | 51 --- .../ext6_inject/impl/Ext6Impl1.java | 38 +- .../WrappedExt.java} | 45 +- .../ext6_wrap/impl/Ext5Impl1.java | 28 ++ .../ext6_wrap/impl/Ext5Impl2.java | 29 ++ .../ext6_wrap/impl/Ext5Wrapper1.java | 39 ++ .../ext6_wrap/impl/Ext5Wrapper2.java | 39 ++ .../ext7/{Ext7.java => InitErrorExt.java} | 2 +- .../extensionloader/ext7/impl/Ext7Impl.java | 4 +- .../ext7/impl/Ext7InitErrorImpl.java | 4 +- ...aba.dubbo.common.extensionloader.ext1.Ext1 | 4 - ...ubbo.common.extensionloader.ext1.SimpleExt | 4 + ...aba.dubbo.common.extensionloader.ext3.Ext3 | 3 - ...ommon.extensionloader.ext3.UseProtolKeyExt | 3 + ...common.extensionloader.ext4.NoUrlParamExt} | 2 +- ....extensionloader.ext5.Ext5NoAdaptiveMethod | 4 - ...n.extensionloader.ext5.NoAdaptiveMethodExt | 2 + ...ommon.extensionloader.ext6_wrap.WrappedExt | 4 + ....common.extensionloader.ext7.InitErrorExt} | 4 +- 39 files changed, 913 insertions(+), 786 deletions(-) create mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/compiler/support/JdkCompilerTest.java create mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoader_Adaptive_Test.java create mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/NoSpiExt.java rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/{Ext1.java => SimpleExt.java} (87%) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/{Ext1Impl1.java => SimpleExtImpl1.java} (88%) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/{Ext1Impl2.java => SimpleExtImpl2.java} (89%) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/{Ext1Impl_ManualAdd.java => SimpleExtImpl3.java} (89%) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/{Ext1Impl3.java => SimpleExtImpl_ManualAdd.java} (88%) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/{Ext3.java => UseProtolKeyExt.java} (90%) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/{Ext3Impl1.java => UseProtolKeyExtImpl1.java} (82%) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/{Ext3Impl2.java => UseProtolKeyExtImpl2.java} (82%) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/{Ext3Impl3.java => UseProtolKeyExtImpl3.java} (82%) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/{Ext4.java => NoUrlParamExt.java} (87%) delete mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Wrapper1.java delete mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Wrapper2.java rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/{ext5/Ext5NoAdaptiveMethod.java => ext6_wrap/WrappedExt.java} (80%) create mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Impl1.java create mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Impl2.java create mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Wrapper1.java create mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Wrapper2.java rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/{Ext7.java => InitErrorExt.java} (97%) delete mode 100644 dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext1.Ext1 create mode 100644 dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt delete mode 100644 dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.Ext3 create mode 100644 dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt rename dubbo-common/src/test/resources/META-INF/dubbo/internal/{com.alibaba.dubbo.common.extensionloader.ext4.Ext4 => com.alibaba.dubbo.common.extensionloader.ext4.NoUrlParamExt} (99%) delete mode 100644 dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod create mode 100644 dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext5.NoAdaptiveMethodExt create mode 100644 dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt rename dubbo-common/src/test/resources/META-INF/dubbo/internal/{com.alibaba.dubbo.common.extensionloader.ext7.Ext7 => com.alibaba.dubbo.common.extensionloader.ext7.InitErrorExt} (98%) diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/compiler/support/JdkCompilerTest.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/compiler/support/JdkCompilerTest.java new file mode 100644 index 00000000000..ebe1a117946 --- /dev/null +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/compiler/support/JdkCompilerTest.java @@ -0,0 +1,28 @@ +/* + * Copyright 1999-2012 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.common.compiler.support; + +import org.junit.Test; + +/** + * @author ding.lid + */ +public class JdkCompilerTest { + @Test + public void test_compileProtocol() throws Exception { + + } +} diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoaderTest.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoaderTest.java index 0cb9f7e73a9..9686105672a 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoaderTest.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoaderTest.java @@ -24,10 +24,8 @@ import static org.junit.Assert.*; import static org.junit.matchers.JUnitMatchers.containsString; -import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Set; import com.alibaba.dubbo.common.Constants; @@ -37,43 +35,64 @@ import com.alibaba.dubbo.common.extensionloader.activate.impl.OrderActivateExtImpl1; import com.alibaba.dubbo.common.extensionloader.activate.impl.OrderActivateExtImpl2; import com.alibaba.dubbo.common.extensionloader.activate.impl.ValueActivateExtImpl; -import com.alibaba.dubbo.common.extensionloader.ext1.impl.Ext1Impl_ManualAdd; +import com.alibaba.dubbo.common.extensionloader.ext1.impl.SimpleExtImpl1; +import com.alibaba.dubbo.common.extensionloader.ext1.impl.SimpleExtImpl_ManualAdd; +import com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt; +import com.alibaba.dubbo.common.extensionloader.ext7.InitErrorExt; import junit.framework.Assert; import org.junit.Test; import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.common.extension.ExtensionLoader; -import com.alibaba.dubbo.common.extensionloader.ext1.Ext1; -import com.alibaba.dubbo.common.extensionloader.ext1.impl.Ext1Impl1; -import com.alibaba.dubbo.common.extensionloader.ext1.impl.Ext1Impl2; +import com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt; +import com.alibaba.dubbo.common.extensionloader.ext1.impl.SimpleExtImpl2; import com.alibaba.dubbo.common.extensionloader.ext2.Ext2; -import com.alibaba.dubbo.common.extensionloader.ext2.UrlHolder; -import com.alibaba.dubbo.common.extensionloader.ext3.Ext3; -import com.alibaba.dubbo.common.extensionloader.ext4.Ext4; -import com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod; -import com.alibaba.dubbo.common.extensionloader.ext5.impl.Ext5Wrapper1; -import com.alibaba.dubbo.common.extensionloader.ext5.impl.Ext5Wrapper2; -import com.alibaba.dubbo.common.extensionloader.ext6_inject.Ext6; -import com.alibaba.dubbo.common.extensionloader.ext6_inject.impl.Ext6Impl2; -import com.alibaba.dubbo.common.extensionloader.ext7.Ext7; -import com.alibaba.dubbo.common.utils.LogUtil; +import com.alibaba.dubbo.common.extensionloader.ext6_wrap.impl.Ext5Wrapper1; +import com.alibaba.dubbo.common.extensionloader.ext6_wrap.impl.Ext5Wrapper2; /** * @author ding.lid */ public class ExtensionLoaderTest { + + @Test + public void test_getExtensionLoader_NotInterface() throws Exception { + try { + ExtensionLoader.getExtensionLoader(ExtensionLoaderTest.class); + fail(); + } catch (IllegalArgumentException expected) { + assertThat(expected.getMessage(), + containsString("Extension type(class com.alibaba.dubbo.common.extensionloader.ExtensionLoaderTest) is not interface")); + + } + } + + @Test + public void test_getExtensionLoader_NotSpiAnnotation() throws Exception { + try { + ExtensionLoader.getExtensionLoader(NoSpiExt.class); + fail(); + } catch (IllegalArgumentException expected) { + assertThat(expected.getMessage(), + allOf(containsString("com.alibaba.dubbo.common.extensionloader.NoSpiExt"), + containsString("is not extension"), + containsString("WITHOUT @SPI Annotation"))); + + } + } + @Test - public void test_getDefault() throws Exception { - Ext1 ext = ExtensionLoader.getExtensionLoader(Ext1.class).getDefaultExtension(); - assertThat(ext, instanceOf(Ext1Impl1.class)); + public void test_getDefaultExtension() throws Exception { + SimpleExt ext = ExtensionLoader.getExtensionLoader(SimpleExt.class).getDefaultExtension(); + assertThat(ext, instanceOf(SimpleExtImpl1.class)); - String name = ExtensionLoader.getExtensionLoader(Ext1.class).getDefaultExtensionName(); + String name = ExtensionLoader.getExtensionLoader(SimpleExt.class).getDefaultExtensionName(); assertEquals("impl1", name); } @Test - public void test_getDefault_NULL() throws Exception { + public void test_getDefaultExtension_NULL() throws Exception { Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getDefaultExtension(); assertNull(ext); @@ -83,62 +102,52 @@ public void test_getDefault_NULL() throws Exception { @Test public void test_getExtension() throws Exception { - assertTrue(ExtensionLoader.getExtensionLoader(Ext1.class).getExtension("impl1") instanceof Ext1Impl1); - assertTrue(ExtensionLoader.getExtensionLoader(Ext1.class).getExtension("impl2") instanceof Ext1Impl2); + assertTrue(ExtensionLoader.getExtensionLoader(SimpleExt.class).getExtension("impl1") instanceof SimpleExtImpl1); + assertTrue(ExtensionLoader.getExtensionLoader(SimpleExt.class).getExtension("impl2") instanceof SimpleExtImpl2); } @Test public void test_getExtension_WithWrapper() throws Exception { - Ext5NoAdaptiveMethod impl1 = ExtensionLoader.getExtensionLoader(Ext5NoAdaptiveMethod.class).getExtension("impl1"); + WrappedExt impl1 = ExtensionLoader.getExtensionLoader(WrappedExt.class).getExtension("impl1"); assertThat(impl1, anyOf(instanceOf(Ext5Wrapper1.class), instanceOf(Ext5Wrapper2.class))); - Ext5NoAdaptiveMethod impl2 = ExtensionLoader.getExtensionLoader(Ext5NoAdaptiveMethod.class).getExtension("impl2") ; + WrappedExt impl2 = ExtensionLoader.getExtensionLoader(WrappedExt.class).getExtension("impl2") ; assertThat(impl2, anyOf(instanceOf(Ext5Wrapper1.class), instanceOf(Ext5Wrapper2.class))); URL url = new URL("p1", "1.2.3.4", 1010, "path1"); int echoCount1 = Ext5Wrapper1.echoCount.get(); int echoCount2 = Ext5Wrapper2.echoCount.get(); - int yellCount1 = Ext5Wrapper1.yellCount.get(); - int yellCount2 = Ext5Wrapper2.yellCount.get(); - + assertEquals("Ext5Impl1-echo", impl1.echo(url, "ha")); assertEquals(echoCount1 + 1, Ext5Wrapper1.echoCount.get()); assertEquals(echoCount2 + 1, Ext5Wrapper2.echoCount.get()); - assertEquals(yellCount1, Ext5Wrapper1.yellCount.get()); - assertEquals(yellCount2, Ext5Wrapper2.yellCount.get()); - - assertEquals("Ext5Impl2-yell", impl2.yell(url, "ha")); - assertEquals(echoCount1 + 1, Ext5Wrapper1.echoCount.get()); - assertEquals(echoCount2 + 1, Ext5Wrapper2.echoCount.get()); - assertEquals(yellCount1 + 1, Ext5Wrapper1.yellCount.get()); - assertEquals(yellCount2 + 1, Ext5Wrapper2.yellCount.get()); } @Test public void test_getExtension_ExceptionNoExtension() throws Exception { try { - ExtensionLoader.getExtensionLoader(Ext1.class).getExtension("XXX"); + ExtensionLoader.getExtensionLoader(SimpleExt.class).getExtension("XXX"); fail(); } catch (IllegalStateException expected) { - assertThat(expected.getMessage(), containsString("No such extension com.alibaba.dubbo.common.extensionloader.ext1.Ext1 by name XXX")); + assertThat(expected.getMessage(), containsString("No such extension com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt by name XXX")); } } @Test public void test_getExtension_ExceptionNoExtension_WrapperNotAffactName() throws Exception { try { - ExtensionLoader.getExtensionLoader(Ext5NoAdaptiveMethod.class).getExtension("XXX"); + ExtensionLoader.getExtensionLoader(WrappedExt.class).getExtension("XXX"); fail(); } catch (IllegalStateException expected) { - assertThat(expected.getMessage(), containsString("No such extension com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod by name XXX")); + assertThat(expected.getMessage(), containsString("No such extension com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt by name XXX")); } } @Test public void test_getExtension_ExceptionNullArg() throws Exception { try { - ExtensionLoader.getExtensionLoader(Ext1.class).getExtension(null); + ExtensionLoader.getExtensionLoader(SimpleExt.class).getExtension(null); fail(); } catch (IllegalArgumentException expected) { assertThat(expected.getMessage(), containsString("Extension name == null")); @@ -147,328 +156,77 @@ public void test_getExtension_ExceptionNullArg() throws Exception { @Test public void test_hasExtension() throws Exception { - assertTrue(ExtensionLoader.getExtensionLoader(Ext1.class).hasExtension("impl1")); - assertFalse(ExtensionLoader.getExtensionLoader(Ext1.class).hasExtension("impl1,impl2")); - assertFalse(ExtensionLoader.getExtensionLoader(Ext1.class).hasExtension("xxx")); + assertTrue(ExtensionLoader.getExtensionLoader(SimpleExt.class).hasExtension("impl1")); + assertFalse(ExtensionLoader.getExtensionLoader(SimpleExt.class).hasExtension("impl1,impl2")); + assertFalse(ExtensionLoader.getExtensionLoader(SimpleExt.class).hasExtension("xxx")); try { - ExtensionLoader.getExtensionLoader(Ext1.class).hasExtension(null); + ExtensionLoader.getExtensionLoader(SimpleExt.class).hasExtension(null); fail(); } catch (IllegalArgumentException expected) { assertThat(expected.getMessage(), containsString("Extension name == null")); } } - - @Test - public void test_getSupportedExtensions() throws Exception { - Set exts = ExtensionLoader.getExtensionLoader(Ext1.class).getSupportedExtensions(); - - Set expected = new HashSet(); - expected.add("impl1"); - expected.add("impl2"); - expected.add("impl3"); - - assertEquals(expected, exts); - } - - @Test - public void test_getSupportedExtensions_NoExtension() throws Exception { - try { - ExtensionLoader.getExtensionLoader(ExtensionLoaderTest.class).getSupportedExtensions(); - fail(); - } catch (IllegalArgumentException expected) { - assertThat(expected.getMessage(), - allOf(containsString("com.alibaba.dubbo.common.extensionloader.ExtensionLoaderTest"), - containsString("is not extension"), - containsString("WITHOUT @SPI Annotation"))); - - } - } @Test - public void test_AddExtension() throws Exception { - try { - ExtensionLoader.getExtensionLoader(Ext1.class).getExtension("Manual"); - fail(); - } - catch (IllegalStateException expected) { - assertThat(expected.getMessage(), containsString("No such extension com.alibaba.dubbo.common.extensionloader.ext1.Ext1 by name Manual")); - } - - ExtensionLoader.getExtensionLoader(Ext1.class).addExtension("Manual", Ext1Impl_ManualAdd.class); - Ext1 ext = ExtensionLoader.getExtensionLoader(Ext1.class).getExtension("Manual"); - - assertThat(ext, instanceOf(Ext1Impl_ManualAdd.class)); - assertEquals("Manual", ExtensionLoader.getExtensionLoader(Ext1.class).getExtensionName(Ext1Impl_ManualAdd.class)); - } - - @Test - public void test_getAdaptiveExtension_defaultExtension() throws Exception { - Ext1 ext = ExtensionLoader.getExtensionLoader(Ext1.class).getAdaptiveExtension(); - - Map map = new HashMap(); - URL url = new URL("p1", "1.2.3.4", 1010, "path1", map); - - String echo = ext.echo(url, "haha"); - assertEquals("Ext1Impl1-echo", echo); - } - - @Test - public void test_getAdaptiveExtension() throws Exception { - Ext1 ext = ExtensionLoader.getExtensionLoader(Ext1.class).getAdaptiveExtension(); - - Map map = new HashMap(); - map.put("ext1", "impl2"); - URL url = new URL("p1", "1.2.3.4", 1010, "path1", map); - - String echo = ext.echo(url, "haha"); - assertEquals("Ext1Impl2-echo", echo); - } - - @Test - public void test_getAdaptiveExtension_customizeKey() throws Exception { - Ext1 ext = ExtensionLoader.getExtensionLoader(Ext1.class).getAdaptiveExtension(); - - Map map = new HashMap(); - map.put("key2", "impl2"); - URL url = new URL("p1", "1.2.3.4", 1010, "path1", map); + public void test_hasExtension_wrapperIsNotExt() throws Exception { + assertTrue(ExtensionLoader.getExtensionLoader(WrappedExt.class).hasExtension("impl1")); + assertFalse(ExtensionLoader.getExtensionLoader(WrappedExt.class).hasExtension("impl1,impl2")); + assertFalse(ExtensionLoader.getExtensionLoader(WrappedExt.class).hasExtension("xxx")); - String echo = ext.yell(url, "haha"); - assertEquals("Ext1Impl2-yell", echo); - - url = url.addParameter("key1", "impl3"); // 注意: URL是值类型 - echo = ext.yell(url, "haha"); - assertEquals("Ext1Impl3-yell", echo); - } - - @Test - public void test_getAdaptiveExtension_UrlNpe() throws Exception { - Ext1 ext = ExtensionLoader.getExtensionLoader(Ext1.class).getAdaptiveExtension(); + assertFalse(ExtensionLoader.getExtensionLoader(WrappedExt.class).hasExtension("wrapper1")); try { - ext.echo(null, "haha"); + ExtensionLoader.getExtensionLoader(WrappedExt.class).hasExtension(null); fail(); - } catch (IllegalArgumentException e) { - assertEquals("url == null", e.getMessage()); - } - } - - @Test - public void test_getAdaptiveExtension_ExceptionWhenNoAdativeMethodOnInterface() throws Exception { - try { - ExtensionLoader.getExtensionLoader(Ext5NoAdaptiveMethod.class).getAdaptiveExtension(); - fail(); - } catch (IllegalStateException expected) { - assertThat(expected.getMessage(), - allOf(containsString("Can not create adaptive extenstion interface com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod"), - containsString("No adaptive method on extension com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod, refuse to create the adaptive class"))); - } - // 多次get,都会报错且相同 - try { - ExtensionLoader.getExtensionLoader(Ext5NoAdaptiveMethod.class).getAdaptiveExtension(); - fail(); - } catch (IllegalStateException expected) { - assertThat(expected.getMessage(), - allOf(containsString("Can not create adaptive extenstion interface com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod"), - containsString("No adaptive method on extension com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod, refuse to create the adaptive class"))); - } - } - - @Test - public void test_getAdaptiveExtension_ExceptionWhenNotAdativeMethod() throws Exception { - Ext1 ext = ExtensionLoader.getExtensionLoader(Ext1.class).getAdaptiveExtension(); - - Map map = new HashMap(); - URL url = new URL("p1", "1.2.3.4", 1010, "path1", map); - - try { - ext.bang(url, 33); - fail(); - } catch (UnsupportedOperationException expected) { - assertThat(expected.getMessage(), containsString("method ")); - assertThat( - expected.getMessage(), - containsString("of interface com.alibaba.dubbo.common.extensionloader.ext1.Ext1 is not adaptive method!")); - } - } - - @Test - public void test_getAdaptiveExtension_ExceptionWhenNoUrlAttrib() throws Exception { - try { - ExtensionLoader.getExtensionLoader(Ext4.class).getAdaptiveExtension(); - fail(); - } catch (Exception expected) { - assertThat(expected.getMessage(), containsString("fail to create adative class for interface ")); - assertThat(expected.getMessage(), containsString(": not found url parameter or url attribute in parameters of method ")); + } catch (IllegalArgumentException expected) { + assertThat(expected.getMessage(), containsString("Extension name == null")); } } @Test - public void test_getAdaptiveExtension_protocolKey() throws Exception { - Ext3 ext = ExtensionLoader.getExtensionLoader(Ext3.class).getAdaptiveExtension(); - - Map map = new HashMap(); - URL url = new URL("impl3", "1.2.3.4", 1010, "path1", map); - - String echo = ext.echo(url, "s"); - assertEquals("Ext3Impl3-echo", echo); - - url = url.addParameter("key1", "impl2"); - echo = ext.echo(url, "s"); - assertEquals("Ext3Impl2-echo", echo); - - String yell = ext.yell(url, "d"); - assertEquals("Ext3Impl3-yell", yell); - } - - - @Test - public void test_getAdaptiveExtension_lastProtocolKey() throws Exception { - Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); - - Map map = new HashMap(); - URL url = new URL("impl1", "1.2.3.4", 1010, "path1", map); - String yell = ext.yell(url, "s"); - assertEquals("Ext2Impl1-yell", yell); - - url = url.addParameter("key1", "impl2"); - yell = ext.yell(url, "s"); - assertEquals("Ext2Impl2-yell", yell); - } - - @Test - public void test_urlHolder_getAdaptiveExtension() throws Exception { - Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); + public void test_getSupportedExtensions() throws Exception { + Set exts = ExtensionLoader.getExtensionLoader(SimpleExt.class).getSupportedExtensions(); - Map map = new HashMap(); - map.put("ext2", "impl1"); - URL url = new URL("p1", "1.2.3.4", 1010, "path1", map); + Set expected = new HashSet(); + expected.add("impl1"); + expected.add("impl2"); + expected.add("impl3"); - UrlHolder holder = new UrlHolder(); - holder.setUrl(url); - - String echo = ext.echo(holder, "haha"); - assertEquals("Ext2Impl1-echo", echo); + assertEquals(expected, exts); } @Test - public void test_urlHolder_getAdaptiveExtension_noExtension() throws Exception { - Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); + public void test_getSupportedExtensions_wrapperIsNotExt() throws Exception { + Set exts = ExtensionLoader.getExtensionLoader(WrappedExt.class).getSupportedExtensions(); - URL url = new URL("p1", "1.2.3.4", 1010, "path1"); + Set expected = new HashSet(); + expected.add("impl1"); + expected.add("impl2"); - UrlHolder holder = new UrlHolder(); - holder.setUrl(url); - - try { - ext.echo(holder, "haha"); - fail(); - } catch (IllegalStateException expected) { - assertThat(expected.getMessage(), containsString("Fail to get extension(")); - } - - url = url.addParameter("ext2", "XXX"); - holder.setUrl(url); - try { - ext.echo(holder, "haha"); - fail(); - } catch (IllegalStateException expected) { - assertThat(expected.getMessage(), containsString("No such extension")); - } + assertEquals(expected, exts); } @Test - public void test_urlHolder_getAdaptiveExtension_UrlNpe() throws Exception { - Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); - + public void test_AddExtension() throws Exception { try { - ext.echo(null, "haha"); + ExtensionLoader.getExtensionLoader(SimpleExt.class).getExtension("Manual"); fail(); - } catch (IllegalArgumentException e) { - assertEquals("com.alibaba.dubbo.common.extensionloader.ext2.UrlHolder argument == null", e.getMessage()); } - - try { - ext.echo(new UrlHolder(), "haha"); - fail(); - } catch (IllegalArgumentException e) { - assertEquals("com.alibaba.dubbo.common.extensionloader.ext2.UrlHolder argument getUrl() == null", e.getMessage()); + catch (IllegalStateException expected) { + assertThat(expected.getMessage(), containsString("No such extension com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt by name Manual")); } - } - - @Test - public void test_urlHolder_getAdaptiveExtension_ExceptionWhenNotAdativeMethod() throws Exception { - Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); - Map map = new HashMap(); - URL url = new URL("p1", "1.2.3.4", 1010, "path1", map); + ExtensionLoader.getExtensionLoader(SimpleExt.class).addExtension("Manual", SimpleExtImpl_ManualAdd.class); + SimpleExt ext = ExtensionLoader.getExtensionLoader(SimpleExt.class).getExtension("Manual"); - try { - ext.bang(url, 33); - fail(); - } catch (UnsupportedOperationException expected) { - assertThat(expected.getMessage(), containsString("method ")); - assertThat( - expected.getMessage(), - containsString("of interface com.alibaba.dubbo.common.extensionloader.ext2.Ext2 is not adaptive method!")); - } + assertThat(ext, instanceOf(SimpleExtImpl_ManualAdd.class)); + assertEquals("Manual", ExtensionLoader.getExtensionLoader(SimpleExt.class).getExtensionName(SimpleExtImpl_ManualAdd.class)); } - @Test - public void test_urlHolder_getAdaptiveExtension_ExceptionWhenNameNotProvided() throws Exception { - Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); - - URL url = new URL("p1", "1.2.3.4", 1010, "path1"); - - UrlHolder holder = new UrlHolder(); - holder.setUrl(url); - - try { - ext.echo(holder, "impl1"); - fail(); - } catch (IllegalStateException expected) { - assertThat(expected.getMessage(), containsString("Fail to get extension(")); - } - - url = url.addParameter("key1", "impl1"); - holder.setUrl(url); - try { - ext.echo(holder, "haha"); - fail(); - } catch (IllegalStateException expected) { - assertThat(expected.getMessage(), containsString("Fail to get extension(com.alibaba.dubbo.common.extensionloader.ext2.Ext2) name from url")); - } - } - - @Test - public void test_getAdaptiveExtension_inject() throws Exception { - LogUtil.start(); - Ext6 ext = ExtensionLoader.getExtensionLoader(Ext6.class).getAdaptiveExtension(); - - URL url = new URL("p1", "1.2.3.4", 1010, "path1"); - url = url.addParameters("ext6", "impl1"); - - assertEquals("Ext6Impl1-echo-Ext1Impl1-echo", ext.echo(url, "ha")); - - Assert.assertTrue("can not find error.", LogUtil.checkNoError()); - LogUtil.stop(); - - url = url.addParameters("ext1", "impl2"); - assertEquals("Ext6Impl1-echo-Ext1Impl2-echo", ext.echo(url, "ha")); - - } - - @Test - public void test_getAdaptiveExtension_InjectNotExtFail() throws Exception { - Ext6 ext = ExtensionLoader.getExtensionLoader(Ext6.class).getExtension("impl2"); - - Ext6Impl2 impl = (Ext6Impl2) ext; - assertNull(impl.getList()); - } - @Test public void test_InitError() throws Exception { - ExtensionLoader loader = ExtensionLoader.getExtensionLoader(Ext7.class); + ExtensionLoader loader = ExtensionLoader.getExtensionLoader(InitErrorExt.class); loader.getExtension("ok"); @@ -476,7 +234,7 @@ public void test_InitError() throws Exception { loader.getExtension("error"); fail(); } catch (IllegalStateException expected) { - assertThat(expected.getMessage(), containsString("Failed to load extension class(interface: interface com.alibaba.dubbo.common.extensionloader.ext7.Ext7")); + assertThat(expected.getMessage(), containsString("Failed to load extension class(interface: interface com.alibaba.dubbo.common.extensionloader.ext7.InitErrorExt")); assertThat(expected.getCause(), instanceOf(ExceptionInInitializerError.class)); } } diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoader_Adaptive_Test.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoader_Adaptive_Test.java new file mode 100644 index 00000000000..cdbb36fad9a --- /dev/null +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoader_Adaptive_Test.java @@ -0,0 +1,308 @@ +/* + * 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.common.extensionloader; + +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extension.ExtensionLoader; +import com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt; +import com.alibaba.dubbo.common.extensionloader.ext2.Ext2; +import com.alibaba.dubbo.common.extensionloader.ext2.UrlHolder; +import com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt; +import com.alibaba.dubbo.common.extensionloader.ext4.NoUrlParamExt; +import com.alibaba.dubbo.common.extensionloader.ext5.NoAdaptiveMethodExt; +import com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt; +import com.alibaba.dubbo.common.extensionloader.ext6_inject.Ext6; +import com.alibaba.dubbo.common.extensionloader.ext6_inject.impl.Ext6Impl2; +import com.alibaba.dubbo.common.utils.LogUtil; +import junit.framework.Assert; +import org.junit.Test; + +import java.util.*; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; +import static org.junit.matchers.JUnitMatchers.containsString; + +/** + * @author ding.lid + */ +public class ExtensionLoader_Adaptive_Test { + @Test + public void test_getAdaptiveExtension_defaultAdaptiveKey() throws Exception { + { + SimpleExt ext = ExtensionLoader.getExtensionLoader(SimpleExt.class).getAdaptiveExtension(); + + Map map = new HashMap(); + URL url = new URL("p1", "1.2.3.4", 1010, "path1", map); + + String echo = ext.echo(url, "haha"); + assertEquals("Ext1Impl1-echo", echo); + } + + { + SimpleExt ext = ExtensionLoader.getExtensionLoader(SimpleExt.class).getAdaptiveExtension(); + + Map map = new HashMap(); + map.put("simple.ext", "impl2"); + URL url = new URL("p1", "1.2.3.4", 1010, "path1", map); + + String echo = ext.echo(url, "haha"); + assertEquals("Ext1Impl2-echo", echo); + } + } + + + @Test + public void test_getAdaptiveExtension_customizeAdaptiveKey() throws Exception { + SimpleExt ext = ExtensionLoader.getExtensionLoader(SimpleExt.class).getAdaptiveExtension(); + + Map map = new HashMap(); + map.put("key2", "impl2"); + URL url = new URL("p1", "1.2.3.4", 1010, "path1", map); + + String echo = ext.yell(url, "haha"); + assertEquals("Ext1Impl2-yell", echo); + + url = url.addParameter("key1", "impl3"); // 注意: URL是值类型 + echo = ext.yell(url, "haha"); + assertEquals("Ext1Impl3-yell", echo); + } + + @Test + public void test_getAdaptiveExtension_UrlNpe() throws Exception { + SimpleExt ext = ExtensionLoader.getExtensionLoader(SimpleExt.class).getAdaptiveExtension(); + + try { + ext.echo(null, "haha"); + fail(); + } catch (IllegalArgumentException e) { + assertEquals("url == null", e.getMessage()); + } + } + + @Test + public void test_getAdaptiveExtension_ExceptionWhenNoAdaptiveMethodOnInterface() throws Exception { + try { + ExtensionLoader.getExtensionLoader(NoAdaptiveMethodExt.class).getAdaptiveExtension(); + fail(); + } catch (IllegalStateException expected) { + assertThat(expected.getMessage(), + allOf(containsString("Can not create adaptive extenstion interface com.alibaba.dubbo.common.extensionloader.ext5.NoAdaptiveMethodExt"), + containsString("No adaptive method on extension com.alibaba.dubbo.common.extensionloader.ext5.NoAdaptiveMethodExt, refuse to create the adaptive class"))); + } + // 多次get,都会报错且相同 + try { + ExtensionLoader.getExtensionLoader(NoAdaptiveMethodExt.class).getAdaptiveExtension(); + fail(); + } catch (IllegalStateException expected) { + assertThat(expected.getMessage(), + allOf(containsString("Can not create adaptive extenstion interface com.alibaba.dubbo.common.extensionloader.ext5.NoAdaptiveMethodExt"), + containsString("No adaptive method on extension com.alibaba.dubbo.common.extensionloader.ext5.NoAdaptiveMethodExt, refuse to create the adaptive class"))); + } + } + + @Test + public void test_getAdaptiveExtension_ExceptionWhenNotAdaptiveMethod() throws Exception { + SimpleExt ext = ExtensionLoader.getExtensionLoader(SimpleExt.class).getAdaptiveExtension(); + + Map map = new HashMap(); + URL url = new URL("p1", "1.2.3.4", 1010, "path1", map); + + try { + ext.bang(url, 33); + fail(); + } catch (UnsupportedOperationException expected) { + assertThat(expected.getMessage(), containsString("method ")); + assertThat( + expected.getMessage(), + containsString("of interface com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt is not adaptive method!")); + } + } + + @Test + public void test_getAdaptiveExtension_ExceptionWhenNoUrlAttrib() throws Exception { + try { + ExtensionLoader.getExtensionLoader(NoUrlParamExt.class).getAdaptiveExtension(); + fail(); + } catch (Exception expected) { + assertThat(expected.getMessage(), containsString("fail to create adative class for interface ")); + assertThat(expected.getMessage(), containsString(": not found url parameter or url attribute in parameters of method ")); + } + } + + @Test + public void test_getAdaptiveExtension_protocolKey() throws Exception { + UseProtolKeyExt ext = ExtensionLoader.getExtensionLoader(UseProtolKeyExt.class).getAdaptiveExtension(); + + Map map = new HashMap(); + URL url = new URL("impl3", "1.2.3.4", 1010, "path1", map); + + String echo = ext.echo(url, "s"); + assertEquals("Ext3Impl3-echo", echo); + + url = url.addParameter("key1", "impl2"); + echo = ext.echo(url, "s"); + assertEquals("Ext3Impl2-echo", echo); + + String yell = ext.yell(url, "d"); + assertEquals("Ext3Impl3-yell", yell); + } + + + @Test + public void test_getAdaptiveExtension_lastProtocolKey() throws Exception { + Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); + + Map map = new HashMap(); + URL url = new URL("impl1", "1.2.3.4", 1010, "path1", map); + String yell = ext.yell(url, "s"); + assertEquals("Ext2Impl1-yell", yell); + + url = url.addParameter("key1", "impl2"); + yell = ext.yell(url, "s"); + assertEquals("Ext2Impl2-yell", yell); + } + + @Test + public void test_urlHolder_getAdaptiveExtension() throws Exception { + Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); + + Map map = new HashMap(); + map.put("ext2", "impl1"); + URL url = new URL("p1", "1.2.3.4", 1010, "path1", map); + + UrlHolder holder = new UrlHolder(); + holder.setUrl(url); + + String echo = ext.echo(holder, "haha"); + assertEquals("Ext2Impl1-echo", echo); + } + + @Test + public void test_urlHolder_getAdaptiveExtension_noExtension() throws Exception { + Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); + + URL url = new URL("p1", "1.2.3.4", 1010, "path1"); + + UrlHolder holder = new UrlHolder(); + holder.setUrl(url); + + try { + ext.echo(holder, "haha"); + fail(); + } catch (IllegalStateException expected) { + assertThat(expected.getMessage(), containsString("Fail to get extension(")); + } + + url = url.addParameter("ext2", "XXX"); + holder.setUrl(url); + try { + ext.echo(holder, "haha"); + fail(); + } catch (IllegalStateException expected) { + assertThat(expected.getMessage(), containsString("No such extension")); + } + } + + @Test + public void test_urlHolder_getAdaptiveExtension_UrlNpe() throws Exception { + Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); + + try { + ext.echo(null, "haha"); + fail(); + } catch (IllegalArgumentException e) { + assertEquals("com.alibaba.dubbo.common.extensionloader.ext2.UrlHolder argument == null", e.getMessage()); + } + + try { + ext.echo(new UrlHolder(), "haha"); + fail(); + } catch (IllegalArgumentException e) { + assertEquals("com.alibaba.dubbo.common.extensionloader.ext2.UrlHolder argument getUrl() == null", e.getMessage()); + } + } + + @Test + public void test_urlHolder_getAdaptiveExtension_ExceptionWhenNotAdativeMethod() throws Exception { + Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); + + Map map = new HashMap(); + URL url = new URL("p1", "1.2.3.4", 1010, "path1", map); + + try { + ext.bang(url, 33); + fail(); + } catch (UnsupportedOperationException expected) { + assertThat(expected.getMessage(), containsString("method ")); + assertThat( + expected.getMessage(), + containsString("of interface com.alibaba.dubbo.common.extensionloader.ext2.Ext2 is not adaptive method!")); + } + } + + @Test + public void test_urlHolder_getAdaptiveExtension_ExceptionWhenNameNotProvided() throws Exception { + Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); + + URL url = new URL("p1", "1.2.3.4", 1010, "path1"); + + UrlHolder holder = new UrlHolder(); + holder.setUrl(url); + + try { + ext.echo(holder, "impl1"); + fail(); + } catch (IllegalStateException expected) { + assertThat(expected.getMessage(), containsString("Fail to get extension(")); + } + + url = url.addParameter("key1", "impl1"); + holder.setUrl(url); + try { + ext.echo(holder, "haha"); + fail(); + } catch (IllegalStateException expected) { + assertThat(expected.getMessage(), containsString("Fail to get extension(com.alibaba.dubbo.common.extensionloader.ext2.Ext2) name from url")); + } + } + + @Test + public void test_getAdaptiveExtension_inject() throws Exception { + LogUtil.start(); + Ext6 ext = ExtensionLoader.getExtensionLoader(Ext6.class).getAdaptiveExtension(); + + URL url = new URL("p1", "1.2.3.4", 1010, "path1"); + url = url.addParameters("ext6", "impl1"); + + assertEquals("Ext6Impl1-echo-Ext1Impl1-echo", ext.echo(url, "ha")); + + Assert.assertTrue("can not find error.", LogUtil.checkNoError()); + LogUtil.stop(); + + url = url.addParameters("simple.ext", "impl2"); + assertEquals("Ext6Impl1-echo-Ext1Impl2-echo", ext.echo(url, "ha")); + + } + + @Test + public void test_getAdaptiveExtension_InjectNotExtFail() throws Exception { + Ext6 ext = ExtensionLoader.getExtensionLoader(Ext6.class).getExtension("impl2"); + + Ext6Impl2 impl = (Ext6Impl2) ext; + assertNull(impl.getList()); + } +} \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/NoSpiExt.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/NoSpiExt.java new file mode 100644 index 00000000000..0c15deaba5f --- /dev/null +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/NoSpiExt.java @@ -0,0 +1,37 @@ +/* + * 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.common.extensionloader; + +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extension.Adaptive; +import com.alibaba.dubbo.common.extension.SPI; + +/** + * 没有SPI注解。 + * + * @author ding.lid + */ +public interface NoSpiExt { + // 没有使用key的@Adaptive ! + @Adaptive + String echo(URL url, String s); + + @Adaptive({"key1", "key2"}) + String yell(URL url, String s); + + // 无@Adaptive ! + String bang(URL url, int i); +} \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/Ext1.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/SimpleExt.java similarity index 87% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/Ext1.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/SimpleExt.java index fcc9ba380ab..3cb4938163d 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/Ext1.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/SimpleExt.java @@ -1,34 +1,39 @@ -/* - * 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. - */ +/* + * 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.common.extensionloader.ext1; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extension.Adaptive; -import com.alibaba.dubbo.common.extension.SPI; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extension.Adaptive; +import com.alibaba.dubbo.common.extension.SPI; /** + * 简单扩展点。 + * 没有Wrapper。 + * * @author ding.lid */ @SPI("impl1") -public interface Ext1 { +public interface SimpleExt { + // 没有使用key的@Adaptive ! @Adaptive String echo(URL url, String s); @Adaptive({"key1", "key2"}) String yell(URL url, String s); - + + // 无@Adaptive ! String bang(URL url, int i); } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/Ext1Impl1.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/SimpleExtImpl1.java similarity index 88% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/Ext1Impl1.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/SimpleExtImpl1.java index 35244404c39..3f439734fde 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/Ext1Impl1.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/SimpleExtImpl1.java @@ -1,29 +1,28 @@ -/* - * 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. - */ +/* + * 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.common.extensionloader.ext1.impl; -import com.alibaba.dubbo.common.Extension; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext1.Ext1; +import com.alibaba.dubbo.common.Extension; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt; /** * @author ding.lid - */ -@Extension("impl1") -public class Ext1Impl1 implements Ext1 { + */ +public class SimpleExtImpl1 implements SimpleExt { public String echo(URL url, String s) { return "Ext1Impl1-echo"; } diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/Ext1Impl2.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/SimpleExtImpl2.java similarity index 89% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/Ext1Impl2.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/SimpleExtImpl2.java index 12e9265dc47..aedd554f286 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/Ext1Impl2.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/SimpleExtImpl2.java @@ -1,28 +1,28 @@ -/* - * 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. - */ +/* + * 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.common.extensionloader.ext1.impl; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext1.Ext1; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt; /** * @author ding.lid * */ -public class Ext1Impl2 implements Ext1 { +public class SimpleExtImpl2 implements SimpleExt { public String echo(URL url, String s) { return "Ext1Impl2-echo"; } diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/Ext1Impl_ManualAdd.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/SimpleExtImpl3.java similarity index 89% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/Ext1Impl_ManualAdd.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/SimpleExtImpl3.java index 2b3b3d190d5..1d316e0267e 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/Ext1Impl_ManualAdd.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/SimpleExtImpl3.java @@ -16,13 +16,13 @@ package com.alibaba.dubbo.common.extensionloader.ext1.impl; import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext1.Ext1; +import com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt; /** * @author ding.lid * */ -public class Ext1Impl_ManualAdd implements Ext1 { +public class SimpleExtImpl3 implements SimpleExt { public String echo(URL url, String s) { return "Ext1Impl3-echo"; } diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/Ext1Impl3.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/SimpleExtImpl_ManualAdd.java similarity index 88% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/Ext1Impl3.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/SimpleExtImpl_ManualAdd.java index 86e18de6f0a..ff4b0871071 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/Ext1Impl3.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext1/impl/SimpleExtImpl_ManualAdd.java @@ -1,28 +1,27 @@ -/* - * 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. - */ +/* + * 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.common.extensionloader.ext1.impl; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext1.Ext1; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt; /** * @author ding.lid - * */ -public class Ext1Impl3 implements Ext1 { +public class SimpleExtImpl_ManualAdd implements SimpleExt { public String echo(URL url, String s) { return "Ext1Impl3-echo"; } diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/Ext2.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/Ext2.java index 7978dcdc026..f1858187b9e 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/Ext2.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/Ext2.java @@ -13,24 +13,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.dubbo.common.extensionloader.ext2; - -import com.alibaba.dubbo.common.URL; +package com.alibaba.dubbo.common.extensionloader.ext2; + +import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.common.extension.Adaptive; import com.alibaba.dubbo.common.extension.SPI; - -/** - * 无Default - * - * @author ding.lid + +/** + * 无Default。 + * + * @author ding.lid */ -@SPI -public interface Ext2 { - @Adaptive - String echo(UrlHolder holder, String s); - - @Adaptive({"key1", "protocol"}) - String yell(URL url, String s); - - String bang(URL url, int i); +@SPI +public interface Ext2 { + // 方法参数的属性是URL! + @Adaptive + String echo(UrlHolder holder, String s); + + @Adaptive({"key1", "protocol"}) + String yell(URL url, String s); + + String bang(URL url, int i); } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/Ext3.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/UseProtolKeyExt.java similarity index 90% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/Ext3.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/UseProtolKeyExt.java index 38bec135cee..90a7cd87bbd 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/Ext3.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/UseProtolKeyExt.java @@ -1,34 +1,33 @@ -/* - * 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. - */ +/* + * 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.common.extensionloader.ext3; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extension.Adaptive; -import com.alibaba.dubbo.common.extension.SPI; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extension.Adaptive; +import com.alibaba.dubbo.common.extension.SPI; /** * @author ding.lid */ @SPI("impl3") -public interface Ext3 { +public interface UseProtolKeyExt { + // protocol key在第二个 @Adaptive({"key1", "protocol"}) String echo(URL url, String s); - + // protocol 吸在第一个 @Adaptive({"protocol", "key2"}) String yell(URL url, String s); - - String bang(URL url, int i); } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/Ext3Impl1.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl1.java similarity index 82% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/Ext3Impl1.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl1.java index 9d8e29b813e..c6d002380ef 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/Ext3Impl1.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl1.java @@ -1,27 +1,27 @@ -/* - * 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. - */ +/* + * 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.common.extensionloader.ext3.impl; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext3.Ext3; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt; /** * @author ding.lid */ -public class Ext3Impl1 implements Ext3 { +public class UseProtolKeyExtImpl1 implements UseProtolKeyExt { public String echo(URL url, String s) { return "Ext3Impl3-echo"; } @@ -29,8 +29,4 @@ public String echo(URL url, String s) { public String yell(URL url, String s) { return "Ext3Impl3-yell"; } - - public String bang(URL url, int i) { - return "bang1"; - } } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/Ext3Impl2.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl2.java similarity index 82% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/Ext3Impl2.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl2.java index 5953c939c1f..1e29a4c1b23 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/Ext3Impl2.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl2.java @@ -1,28 +1,28 @@ -/* - * 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. - */ +/* + * 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.common.extensionloader.ext3.impl; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext3.Ext3; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt; /** * @author ding.lid * */ -public class Ext3Impl2 implements Ext3 { +public class UseProtolKeyExtImpl2 implements UseProtolKeyExt { public String echo(URL url, String s) { return "Ext3Impl2-echo"; } @@ -30,9 +30,4 @@ public String echo(URL url, String s) { public String yell(URL url, String s) { return "Ext3Impl2-yell"; } - - public String bang(URL url, int i) { - return "bang2"; - } - } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/Ext3Impl3.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl3.java similarity index 82% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/Ext3Impl3.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl3.java index ae5b6d129b7..0a5f695ff92 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/Ext3Impl3.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl3.java @@ -1,28 +1,28 @@ -/* - * 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. - */ +/* + * 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.common.extensionloader.ext3.impl; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext3.Ext3; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt; /** * @author ding.lid * */ -public class Ext3Impl3 implements Ext3 { +public class UseProtolKeyExtImpl3 implements UseProtolKeyExt { public String echo(URL url, String s) { return "Ext3Impl3-echo"; } @@ -30,9 +30,4 @@ public String echo(URL url, String s) { public String yell(URL url, String s) { return "Ext3Impl3-yell"; } - - public String bang(URL url, int i) { - return "bang3"; - } - } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/Ext4.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/NoUrlParamExt.java similarity index 87% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/Ext4.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/NoUrlParamExt.java index b255b9b4ea9..94d2e4c0399 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/Ext4.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/NoUrlParamExt.java @@ -1,30 +1,31 @@ -/* - * 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. - */ +/* + * 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.common.extensionloader.ext4; -import java.util.List; - -import com.alibaba.dubbo.common.extension.Adaptive; -import com.alibaba.dubbo.common.extension.SPI; +import java.util.List; + +import com.alibaba.dubbo.common.extension.Adaptive; +import com.alibaba.dubbo.common.extension.SPI; /** * @author ding.lid */ @SPI("impl1") -public interface Ext4 { +public interface NoUrlParamExt { + // 没有URL参数的方法! @Adaptive - String bark(String name, List list); // 没有URL参数的方法 + String bark(String name, List list); } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/impl/Ext4Impl1.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/impl/Ext4Impl1.java index 6e72d8dff7c..e4f22559e26 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/impl/Ext4Impl1.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/impl/Ext4Impl1.java @@ -13,17 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.dubbo.common.extensionloader.ext4.impl; - +package com.alibaba.dubbo.common.extensionloader.ext4.impl; + import java.util.List; -import com.alibaba.dubbo.common.extensionloader.ext4.Ext4; - -/** - * @author ding.lid - */ -public class Ext4Impl1 implements Ext4 { - public String bark(String name, List list) { - return null; - } +import com.alibaba.dubbo.common.extensionloader.ext4.NoUrlParamExt; + +/** + * @author ding.lid + */ +public class Ext4Impl1 implements NoUrlParamExt { + public String bark(String name, List list) { + return null; + } } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/impl/Ext4Impl2.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/impl/Ext4Impl2.java index bf9811111af..6bbdea855d1 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/impl/Ext4Impl2.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext4/impl/Ext4Impl2.java @@ -13,32 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.dubbo.common.extensionloader.ext4.impl; - +package com.alibaba.dubbo.common.extensionloader.ext4.impl; + import java.util.List; import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext4.Ext4; - -/** - * @author ding.lid - * - */ -public class Ext4Impl2 implements Ext4 { - public String echo(URL url, String s) { - return "Ext3Impl2-echo"; - } - - public String yell(URL url, String s) { - return "Ext3Impl2-yell"; - } - - public String bang(URL url, int i) { - return "bang2"; - } - - public String bark(String name, List list) { - return null; - } - +import com.alibaba.dubbo.common.extensionloader.ext4.NoUrlParamExt; + +/** + * @author ding.lid + * + */ +public class Ext4Impl2 implements NoUrlParamExt { + public String bark(String name, List list) { + return null; + } + } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Impl1.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Impl1.java index f674af04efc..57095c2b5c3 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Impl1.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Impl1.java @@ -1,36 +1,28 @@ -/* - * 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. - */ +/* + * 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.common.extensionloader.ext5.impl; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.ext5.NoAdaptiveMethodExt; /** * @author ding.lid */ -public class Ext5Impl1 implements Ext5NoAdaptiveMethod { +public class Ext5Impl1 implements NoAdaptiveMethodExt { public String echo(URL url, String s) { return "Ext5Impl1-echo"; } - - public String yell(URL url, String s) { - return "Ext5Impl1-yell"; - } - - public String bang(URL url, int i) { - return "impl1"; - } } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Impl2.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Impl2.java index a6c6cda0ae6..727234fc19b 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Impl2.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Impl2.java @@ -1,37 +1,29 @@ -/* - * 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. - */ +/* + * 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.common.extensionloader.ext5.impl; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.ext5.NoAdaptiveMethodExt; /** * @author ding.lid * */ -public class Ext5Impl2 implements Ext5NoAdaptiveMethod { +public class Ext5Impl2 implements NoAdaptiveMethodExt { public String echo(URL url, String s) { return "Ext5Impl2-echo"; } - - public String yell(URL url, String s) { - return "Ext5Impl2-yell"; - } - - public String bang(URL url, int i) { - return "impl2"; - } } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Wrapper1.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Wrapper1.java deleted file mode 100644 index a1517770139..00000000000 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Wrapper1.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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.common.extensionloader.ext5.impl; - -import java.util.concurrent.atomic.AtomicInteger; - -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod; - -/** - * @author ding.lid - */ -public class Ext5Wrapper1 implements Ext5NoAdaptiveMethod { - Ext5NoAdaptiveMethod instance; - - public static AtomicInteger echoCount = new AtomicInteger(); - public static AtomicInteger yellCount = new AtomicInteger(); - public static AtomicInteger bangCount = new AtomicInteger(); - - public Ext5Wrapper1(Ext5NoAdaptiveMethod instance) { - this.instance = instance; - } - - public String echo(URL url, String s) { - echoCount.incrementAndGet(); - return instance.echo(url, s); - } - - public String yell(URL url, String s) { - yellCount.incrementAndGet(); - return instance.yell(url, s); - } - - public String bang(URL url, int i) { - bangCount.incrementAndGet(); - return instance.bang(url, i); - } -} \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Wrapper2.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Wrapper2.java deleted file mode 100644 index ffb1dcba220..00000000000 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/impl/Ext5Wrapper2.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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.common.extensionloader.ext5.impl; - -import java.util.concurrent.atomic.AtomicInteger; - -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod; - -/** - * @author ding.lid - */ -public class Ext5Wrapper2 implements Ext5NoAdaptiveMethod { - Ext5NoAdaptiveMethod instance; - - public static AtomicInteger echoCount = new AtomicInteger(); - public static AtomicInteger yellCount = new AtomicInteger(); - public static AtomicInteger bangCount = new AtomicInteger(); - - public Ext5Wrapper2(Ext5NoAdaptiveMethod instance) { - this.instance = instance; - } - - public String echo(URL url, String s) { - echoCount.incrementAndGet(); - return instance.echo(url, s); - } - - public String yell(URL url, String s) { - yellCount.incrementAndGet(); - return instance.yell(url, s); - } - - public String bang(URL url, int i) { - bangCount.incrementAndGet(); - return instance.bang(url, i); - } -} \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_inject/impl/Ext6Impl1.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_inject/impl/Ext6Impl1.java index d3a64f19d4d..a4ef9da924c 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_inject/impl/Ext6Impl1.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_inject/impl/Ext6Impl1.java @@ -13,34 +13,34 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.dubbo.common.extensionloader.ext6_inject.impl; - +package com.alibaba.dubbo.common.extensionloader.ext6_inject.impl; + import junit.framework.Assert; import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext1.Ext1; +import com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt; import com.alibaba.dubbo.common.extensionloader.ext6_inject.Dao; import com.alibaba.dubbo.common.extensionloader.ext6_inject.Ext6; - -/** - * @author ding.lid - */ -public class Ext6Impl1 implements Ext6 { - Ext1 ext1; + +/** + * @author ding.lid + */ +public class Ext6Impl1 implements Ext6 { + SimpleExt ext1; public Dao obj; public void setDao(Dao obj){ Assert.assertNotNull("inject extension instance can not be null", obj); Assert.fail(); - } - - public void setExt1(Ext1 ext1) { - this.ext1 = ext1; - } - - public String echo(URL url, String s) { - return "Ext6Impl1-echo-" + ext1.echo(url, s); } - - + + public void setExt1(SimpleExt ext1) { + this.ext1 = ext1; + } + + public String echo(URL url, String s) { + return "Ext6Impl1-echo-" + ext1.echo(url, s); + } + + } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/Ext5NoAdaptiveMethod.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/WrappedExt.java similarity index 80% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/Ext5NoAdaptiveMethod.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/WrappedExt.java index 955a4b10fb6..db9aaf0ca00 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext5/Ext5NoAdaptiveMethod.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/WrappedExt.java @@ -1,31 +1,30 @@ -/* - * 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.common.extensionloader.ext5; +/* + * 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.common.extensionloader.ext6_wrap; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extension.SPI; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extension.SPI; /** + * No Adaptive Method!! + * * @author ding.lid */ @SPI("impl1") -public interface Ext5NoAdaptiveMethod { +public interface WrappedExt { + String echo(URL url, String s); - - String yell(URL url, String s); - - String bang(URL url, int i); } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Impl1.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Impl1.java new file mode 100644 index 00000000000..3896a76751e --- /dev/null +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Impl1.java @@ -0,0 +1,28 @@ +/* + * 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.common.extensionloader.ext6_wrap.impl; + +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt; + +/** + * @author ding.lid + */ +public class Ext5Impl1 implements WrappedExt { + public String echo(URL url, String s) { + return "Ext5Impl1-echo"; + } +} \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Impl2.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Impl2.java new file mode 100644 index 00000000000..1fd3fd6cc2c --- /dev/null +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Impl2.java @@ -0,0 +1,29 @@ +/* + * 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.common.extensionloader.ext6_wrap.impl; + +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt; + +/** + * @author ding.lid + * + */ +public class Ext5Impl2 implements WrappedExt { + public String echo(URL url, String s) { + return "Ext5Impl2-echo"; + } +} \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Wrapper1.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Wrapper1.java new file mode 100644 index 00000000000..61236e5ceb5 --- /dev/null +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Wrapper1.java @@ -0,0 +1,39 @@ +/* + * 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.common.extensionloader.ext6_wrap.impl; + +import java.util.concurrent.atomic.AtomicInteger; + +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt; + +/** + * @author ding.lid + */ +public class Ext5Wrapper1 implements WrappedExt { + WrappedExt instance; + + public static AtomicInteger echoCount = new AtomicInteger(); + + public Ext5Wrapper1(WrappedExt instance) { + this.instance = instance; + } + + public String echo(URL url, String s) { + echoCount.incrementAndGet(); + return instance.echo(url, s); + } +} \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Wrapper2.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Wrapper2.java new file mode 100644 index 00000000000..614ed36ec4e --- /dev/null +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext6_wrap/impl/Ext5Wrapper2.java @@ -0,0 +1,39 @@ +/* + * 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.common.extensionloader.ext6_wrap.impl; + +import java.util.concurrent.atomic.AtomicInteger; + +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt; + +/** + * @author ding.lid + */ +public class Ext5Wrapper2 implements WrappedExt { + WrappedExt instance; + + public static AtomicInteger echoCount = new AtomicInteger(); + + public Ext5Wrapper2(WrappedExt instance) { + this.instance = instance; + } + + public String echo(URL url, String s) { + echoCount.incrementAndGet(); + return instance.echo(url, s); + } +} \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/Ext7.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/InitErrorExt.java similarity index 97% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/Ext7.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/InitErrorExt.java index 57667195403..b072b7c865c 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/Ext7.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/InitErrorExt.java @@ -26,7 +26,7 @@ * @author ding.lid */ @SPI -public interface Ext7 { +public interface InitErrorExt { @Adaptive String echo(URL url, String s); } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/impl/Ext7Impl.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/impl/Ext7Impl.java index 3eedd086e25..aaca76cf702 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/impl/Ext7Impl.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/impl/Ext7Impl.java @@ -16,12 +16,12 @@ package com.alibaba.dubbo.common.extensionloader.ext7.impl; import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext7.Ext7; +import com.alibaba.dubbo.common.extensionloader.ext7.InitErrorExt; /** * @author ding.lid */ -public class Ext7Impl implements Ext7 { +public class Ext7Impl implements InitErrorExt { public String echo(URL url, String s) { return ""; } diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/impl/Ext7InitErrorImpl.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/impl/Ext7InitErrorImpl.java index 0edba0e1ee4..7fa181e1af1 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/impl/Ext7InitErrorImpl.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext7/impl/Ext7InitErrorImpl.java @@ -16,12 +16,12 @@ package com.alibaba.dubbo.common.extensionloader.ext7.impl; import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext7.Ext7; +import com.alibaba.dubbo.common.extensionloader.ext7.InitErrorExt; /** * @author ding.lid */ -public class Ext7InitErrorImpl implements Ext7 { +public class Ext7InitErrorImpl implements InitErrorExt { static { if(true) { diff --git a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext1.Ext1 b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext1.Ext1 deleted file mode 100644 index ea1ce319c67..00000000000 --- a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext1.Ext1 +++ /dev/null @@ -1,4 +0,0 @@ -# Comment 1 -impl1=com.alibaba.dubbo.common.extensionloader.ext1.impl.Ext1Impl1#Hello World -impl2=com.alibaba.dubbo.common.extensionloader.ext1.impl.Ext1Impl2 # Comment 2 - impl3=com.alibaba.dubbo.common.extensionloader.ext1.impl.Ext1Impl3 # with head space \ No newline at end of file diff --git a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt new file mode 100644 index 00000000000..f91b958af68 --- /dev/null +++ b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt @@ -0,0 +1,4 @@ +# Comment 1 +impl1=com.alibaba.dubbo.common.extensionloader.ext1.impl.SimpleExtImpl1#Hello World +impl2=com.alibaba.dubbo.common.extensionloader.ext1.impl.SimpleExtImpl2 # Comment 2 + impl3=com.alibaba.dubbo.common.extensionloader.ext1.impl.SimpleExtImpl3 # with head space \ No newline at end of file diff --git a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.Ext3 b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.Ext3 deleted file mode 100644 index 62bfa838694..00000000000 --- a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.Ext3 +++ /dev/null @@ -1,3 +0,0 @@ -impl1=com.alibaba.dubbo.common.extensionloader.ext3.impl.Ext3Impl1 -impl2=com.alibaba.dubbo.common.extensionloader.ext3.impl.Ext3Impl2 -impl3=com.alibaba.dubbo.common.extensionloader.ext3.impl.Ext3Impl3 \ No newline at end of file diff --git a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt new file mode 100644 index 00000000000..e17f6a2142c --- /dev/null +++ b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt @@ -0,0 +1,3 @@ +impl1=com.alibaba.dubbo.common.extensionloader.ext3.impl.UseProtolKeyExtImpl1 +impl2=com.alibaba.dubbo.common.extensionloader.ext3.impl.UseProtolKeyExtImpl2 +impl3=com.alibaba.dubbo.common.extensionloader.ext3.impl.UseProtolKeyExtImpl3 \ No newline at end of file diff --git a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext4.Ext4 b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext4.NoUrlParamExt similarity index 99% rename from dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext4.Ext4 rename to dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext4.NoUrlParamExt index 3c64e22ae87..97aa3838b87 100644 --- a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext4.Ext4 +++ b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext4.NoUrlParamExt @@ -1,2 +1,2 @@ -impl1=com.alibaba.dubbo.common.extensionloader.ext4.impl.Ext4Impl1 +impl1=com.alibaba.dubbo.common.extensionloader.ext4.impl.Ext4Impl1 impl2=com.alibaba.dubbo.common.extensionloader.ext4.impl.Ext4Impl2 \ No newline at end of file diff --git a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod deleted file mode 100644 index 5604232eb23..00000000000 --- a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext5.Ext5NoAdaptiveMethod +++ /dev/null @@ -1,4 +0,0 @@ -impl1=com.alibaba.dubbo.common.extensionloader.ext5.impl.Ext5Impl1 -impl2=com.alibaba.dubbo.common.extensionloader.ext5.impl.Ext5Impl2 -wrapper1=com.alibaba.dubbo.common.extensionloader.ext5.impl.Ext5Wrapper1 -wrapper2=com.alibaba.dubbo.common.extensionloader.ext5.impl.Ext5Wrapper2 \ No newline at end of file diff --git a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext5.NoAdaptiveMethodExt b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext5.NoAdaptiveMethodExt new file mode 100644 index 00000000000..a416f9d7537 --- /dev/null +++ b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext5.NoAdaptiveMethodExt @@ -0,0 +1,2 @@ +impl1=com.alibaba.dubbo.common.extensionloader.ext5.impl.Ext5Impl1 +impl2=com.alibaba.dubbo.common.extensionloader.ext5.impl.Ext5Impl2 diff --git a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt new file mode 100644 index 00000000000..e0897cd99f9 --- /dev/null +++ b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt @@ -0,0 +1,4 @@ +impl1=com.alibaba.dubbo.common.extensionloader.ext6_wrap.impl.Ext5Impl1 +impl2=com.alibaba.dubbo.common.extensionloader.ext6_wrap.impl.Ext5Impl2 +wrapper1=com.alibaba.dubbo.common.extensionloader.ext6_wrap.impl.Ext5Wrapper1 +wrapper2=com.alibaba.dubbo.common.extensionloader.ext6_wrap.impl.Ext5Wrapper2 \ No newline at end of file diff --git a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext7.Ext7 b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext7.InitErrorExt similarity index 98% rename from dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext7.Ext7 rename to dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext7.InitErrorExt index 5fa7829fcfa..549094e3bce 100644 --- a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext7.Ext7 +++ b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext7.InitErrorExt @@ -1,2 +1,2 @@ -error=com.alibaba.dubbo.common.extensionloader.ext7.impl.Ext7InitErrorImpl -ok=com.alibaba.dubbo.common.extensionloader.ext7.impl.Ext7Impl +error=com.alibaba.dubbo.common.extensionloader.ext7.impl.Ext7InitErrorImpl +ok=com.alibaba.dubbo.common.extensionloader.ext7.impl.Ext7Impl From 6236f4cf6eb54865dad4e6a7102c9d86e694882a Mon Sep 17 00:00:00 2001 From: oldrat Date: Mon, 30 Jul 2012 22:36:18 +0800 Subject: [PATCH 3/5] =?UTF-8?q?DUBBO-536=20ExtensionLoader=E7=9A=84?= =?UTF-8?q?=E5=85=BC=E5=AE=B9@Extension=20UT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtensionLoader_Compatible_Test.java | 56 +++++++++++++++++++ .../compatible/CompatibleExt.java | 30 ++++++++++ .../compatible/impl/CompatibleExtImpl1.java | 38 +++++++++++++ .../compatible/impl/CompatibleExtImpl2.java | 38 +++++++++++++ ...n.extensionloader.compatible.CompatibleExt | 2 + 5 files changed, 164 insertions(+) create mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoader_Compatible_Test.java create mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/compatible/CompatibleExt.java create mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/compatible/impl/CompatibleExtImpl1.java create mode 100644 dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/compatible/impl/CompatibleExtImpl2.java create mode 100644 dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.compatible.CompatibleExt diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoader_Compatible_Test.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoader_Compatible_Test.java new file mode 100644 index 00000000000..67a9e56d929 --- /dev/null +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoader_Compatible_Test.java @@ -0,0 +1,56 @@ +/* + * 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.common.extensionloader; + +import com.alibaba.dubbo.common.Constants; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extension.ExtensionLoader; +import com.alibaba.dubbo.common.extensionloader.activate.ActivateExt1; +import com.alibaba.dubbo.common.extensionloader.activate.impl.*; +import com.alibaba.dubbo.common.extensionloader.compatible.CompatibleExt; +import com.alibaba.dubbo.common.extensionloader.compatible.impl.CompatibleExtImpl1; +import com.alibaba.dubbo.common.extensionloader.compatible.impl.CompatibleExtImpl2; +import com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt; +import com.alibaba.dubbo.common.extensionloader.ext1.impl.SimpleExtImpl1; +import com.alibaba.dubbo.common.extensionloader.ext1.impl.SimpleExtImpl2; +import com.alibaba.dubbo.common.extensionloader.ext1.impl.SimpleExtImpl_ManualAdd; +import com.alibaba.dubbo.common.extensionloader.ext2.Ext2; +import com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt; +import com.alibaba.dubbo.common.extensionloader.ext6_wrap.impl.Ext5Wrapper1; +import com.alibaba.dubbo.common.extensionloader.ext6_wrap.impl.Ext5Wrapper2; +import com.alibaba.dubbo.common.extensionloader.ext7.InitErrorExt; +import junit.framework.Assert; +import org.junit.Test; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; +import static org.junit.matchers.JUnitMatchers.containsString; + +/** + * @author ding.lid + */ +public class ExtensionLoader_Compatible_Test { + + @Test + public void test_getExtension() throws Exception { + assertTrue(ExtensionLoader.getExtensionLoader(CompatibleExt.class).getExtension("impl1") instanceof CompatibleExtImpl1); + assertTrue(ExtensionLoader.getExtensionLoader(CompatibleExt.class).getExtension("impl2") instanceof CompatibleExtImpl2); + } +} \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/compatible/CompatibleExt.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/compatible/CompatibleExt.java new file mode 100644 index 00000000000..21b3eb183f7 --- /dev/null +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/compatible/CompatibleExt.java @@ -0,0 +1,30 @@ +/* + * 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.common.extensionloader.compatible; + +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extension.Adaptive; +import com.alibaba.dubbo.common.extension.SPI; + +/** + * + * @author ding.lid + */ +@SPI("impl1") +public interface CompatibleExt { + @Adaptive + String echo(URL url, String s); +} \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/compatible/impl/CompatibleExtImpl1.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/compatible/impl/CompatibleExtImpl1.java new file mode 100644 index 00000000000..63b0b3cc9a9 --- /dev/null +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/compatible/impl/CompatibleExtImpl1.java @@ -0,0 +1,38 @@ +/* + * 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.common.extensionloader.compatible.impl; + +import com.alibaba.dubbo.common.Extension; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.compatible.CompatibleExt; + +/** + * @author ding.lid + */ +@Extension("impl1") +public class CompatibleExtImpl1 implements CompatibleExt { + public String echo(URL url, String s) { + return "Ext1Impl1-echo"; + } + + public String yell(URL url, String s) { + return "Ext1Impl1-yell"; + } + + public String bang(URL url, int i) { + return "bang1"; + } +} \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/compatible/impl/CompatibleExtImpl2.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/compatible/impl/CompatibleExtImpl2.java new file mode 100644 index 00000000000..68e6d3312f4 --- /dev/null +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/compatible/impl/CompatibleExtImpl2.java @@ -0,0 +1,38 @@ +/* + * 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.common.extensionloader.compatible.impl; + +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extensionloader.compatible.CompatibleExt; + +/** + * @author ding.lid + * + */ +public class CompatibleExtImpl2 implements CompatibleExt { + public String echo(URL url, String s) { + return "Ext1Impl2-echo"; + } + + public String yell(URL url, String s) { + return "Ext1Impl2-yell"; + } + + public String bang(URL url, int i) { + return "bang2"; + } + +} \ No newline at end of file diff --git a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.compatible.CompatibleExt b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.compatible.CompatibleExt new file mode 100644 index 00000000000..9f176b744c6 --- /dev/null +++ b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.compatible.CompatibleExt @@ -0,0 +1,2 @@ +com.alibaba.dubbo.common.extensionloader.compatible.impl.CompatibleExtImpl1 +impl2=com.alibaba.dubbo.common.extensionloader.compatible.impl.CompatibleExtImpl2 \ No newline at end of file From c33be998ed9486a7cec18b20b220eff44a8b975c Mon Sep 17 00:00:00 2001 From: oldrat Date: Tue, 31 Jul 2012 11:10:07 +0800 Subject: [PATCH 4/5] =?UTF-8?q?DUBBO-520=20ExtensionLoader=E7=9A=84getExte?= =?UTF-8?q?nsion=E5=90=8D=E5=AD=97=E8=BD=AC=E5=85=A5true=E4=B8=8D=E5=BA=94?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E7=BC=BA=E7=9C=81=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/alibaba/dubbo/common/extension/ExtensionLoader.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java index 4cf78782c62..6755ad50da6 100644 --- a/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java +++ b/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java @@ -303,9 +303,6 @@ public Set getLoadedExtensions() { public T getExtension(String name) { if (name == null || name.length() == 0) throw new IllegalArgumentException("Extension name == null"); - if ("true".equals(name)) { - return getDefaultExtension(); - } Holder holder = cachedInstances.get(name); if (holder == null) { cachedInstances.putIfAbsent(name, new Holder()); @@ -329,8 +326,7 @@ public T getExtension(String name) { */ public T getDefaultExtension() { getExtensionClasses(); - if(null == cachedDefaultName || cachedDefaultName.length() == 0 - || "true".equals(cachedDefaultName)) { + if(null == cachedDefaultName || cachedDefaultName.length() == 0) { return null; } return getExtension(cachedDefaultName); From 786271cc139ba223b4e184970bbff29dd94efde5 Mon Sep 17 00:00:00 2001 From: oldrat Date: Tue, 31 Jul 2012 15:13:48 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=95=B4=E7=90=86ExtensionLoader=20UT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extensionloader/ExtensionLoaderTest.java | 12 +++- .../ExtensionLoader_Adaptive_Test.java | 64 ++++++++++--------- .../common/extensionloader/ext2/Ext2.java | 5 +- .../extensionloader/ext2/impl/Ext2Impl1.java | 32 ++++------ .../extensionloader/ext2/impl/Ext2Impl2.java | 36 +++++------ .../extensionloader/ext2/impl/Ext2Impl3.java | 36 +++++------ ...otolKeyExt.java => UseProtocolKeyExt.java} | 4 +- ...Impl1.java => UseProtocolKeyExtImpl1.java} | 8 +-- ...Impl2.java => UseProtocolKeyExtImpl2.java} | 4 +- ...Impl3.java => UseProtocolKeyExtImpl3.java} | 4 +- ...on.extensionloader.ext3.UseProtocolKeyExt} | 6 +- 11 files changed, 103 insertions(+), 108 deletions(-) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/{UseProtolKeyExt.java => UseProtocolKeyExt.java} (95%) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/{UseProtolKeyExtImpl1.java => UseProtocolKeyExtImpl1.java} (80%) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/{UseProtolKeyExtImpl2.java => UseProtocolKeyExtImpl2.java} (86%) rename dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/{UseProtolKeyExtImpl3.java => UseProtocolKeyExtImpl3.java} (86%) rename dubbo-common/src/test/resources/META-INF/dubbo/internal/{com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt => com.alibaba.dubbo.common.extensionloader.ext3.UseProtocolKeyExt} (80%) diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoaderTest.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoaderTest.java index 9686105672a..e81db02e9cb 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoaderTest.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoaderTest.java @@ -55,6 +55,16 @@ * @author ding.lid */ public class ExtensionLoaderTest { + @Test + public void test_getExtensionLoader_Null() throws Exception { + try { + ExtensionLoader.getExtensionLoader(null); + fail(); + } catch (IllegalArgumentException expected) { + assertThat(expected.getMessage(), + containsString("Extension type == null")); + } + } @Test public void test_getExtensionLoader_NotInterface() throws Exception { @@ -64,7 +74,6 @@ public void test_getExtensionLoader_NotInterface() throws Exception { } catch (IllegalArgumentException expected) { assertThat(expected.getMessage(), containsString("Extension type(class com.alibaba.dubbo.common.extensionloader.ExtensionLoaderTest) is not interface")); - } } @@ -78,7 +87,6 @@ public void test_getExtensionLoader_NotSpiAnnotation() throws Exception { allOf(containsString("com.alibaba.dubbo.common.extensionloader.NoSpiExt"), containsString("is not extension"), containsString("WITHOUT @SPI Annotation"))); - } } diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoader_Adaptive_Test.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoader_Adaptive_Test.java index cdbb36fad9a..b074e1a8ee1 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoader_Adaptive_Test.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ExtensionLoader_Adaptive_Test.java @@ -20,10 +20,9 @@ import com.alibaba.dubbo.common.extensionloader.ext1.SimpleExt; import com.alibaba.dubbo.common.extensionloader.ext2.Ext2; import com.alibaba.dubbo.common.extensionloader.ext2.UrlHolder; -import com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt; +import com.alibaba.dubbo.common.extensionloader.ext3.UseProtocolKeyExt; import com.alibaba.dubbo.common.extensionloader.ext4.NoUrlParamExt; import com.alibaba.dubbo.common.extensionloader.ext5.NoAdaptiveMethodExt; -import com.alibaba.dubbo.common.extensionloader.ext6_wrap.WrappedExt; import com.alibaba.dubbo.common.extensionloader.ext6_inject.Ext6; import com.alibaba.dubbo.common.extensionloader.ext6_inject.impl.Ext6Impl2; import com.alibaba.dubbo.common.utils.LogUtil; @@ -145,35 +144,38 @@ public void test_getAdaptiveExtension_ExceptionWhenNoUrlAttrib() throws Exceptio @Test public void test_getAdaptiveExtension_protocolKey() throws Exception { - UseProtolKeyExt ext = ExtensionLoader.getExtensionLoader(UseProtolKeyExt.class).getAdaptiveExtension(); - - Map map = new HashMap(); - URL url = new URL("impl3", "1.2.3.4", 1010, "path1", map); - - String echo = ext.echo(url, "s"); - assertEquals("Ext3Impl3-echo", echo); - - url = url.addParameter("key1", "impl2"); - echo = ext.echo(url, "s"); - assertEquals("Ext3Impl2-echo", echo); - - String yell = ext.yell(url, "d"); - assertEquals("Ext3Impl3-yell", yell); - } - - - @Test - public void test_getAdaptiveExtension_lastProtocolKey() throws Exception { - Ext2 ext = ExtensionLoader.getExtensionLoader(Ext2.class).getAdaptiveExtension(); - - Map map = new HashMap(); - URL url = new URL("impl1", "1.2.3.4", 1010, "path1", map); - String yell = ext.yell(url, "s"); - assertEquals("Ext2Impl1-yell", yell); - - url = url.addParameter("key1", "impl2"); - yell = ext.yell(url, "s"); - assertEquals("Ext2Impl2-yell", yell); + UseProtocolKeyExt ext = ExtensionLoader.getExtensionLoader(UseProtocolKeyExt.class).getAdaptiveExtension(); + + { + String echo = ext.echo(URL.valueOf("1.2.3.4:20880"), "s"); + assertEquals("Ext3Impl1-echo", echo); // 缺省值 + + Map map = new HashMap(); + URL url = new URL("impl3", "1.2.3.4", 1010, "path1", map); + + echo = ext.echo(url, "s"); + assertEquals("Ext3Impl3-echo", echo); // 使用第2Key, Protocol + + url = url.addParameter("key1", "impl2"); + echo = ext.echo(url, "s"); + assertEquals("Ext3Impl2-echo", echo); // 使用第1Key, key1 + } + + { + + Map map = new HashMap(); + URL url = new URL(null, "1.2.3.4", 1010, "path1", map); + String yell = ext.yell(url, "s"); + assertEquals("Ext3Impl1-yell", yell); // 缺省值 + + url = url.addParameter("key2", "impl2"); // 使用第2Key, key2 + yell = ext.yell(url, "s"); + assertEquals("Ext3Impl2-yell", yell); + + url = url.setProtocol("impl3"); // 使用第1Key, Protocol + yell = ext.yell(url, "d"); + assertEquals("Ext3Impl3-yell", yell); + } } @Test diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/Ext2.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/Ext2.java index f1858187b9e..dcf36d8d586 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/Ext2.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/Ext2.java @@ -29,9 +29,6 @@ public interface Ext2 { // 方法参数的属性是URL! @Adaptive String echo(UrlHolder holder, String s); - - @Adaptive({"key1", "protocol"}) - String yell(URL url, String s); - + String bang(URL url, int i); } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/impl/Ext2Impl1.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/impl/Ext2Impl1.java index 5eb0b8c1f72..7c0fcad13b9 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/impl/Ext2Impl1.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/impl/Ext2Impl1.java @@ -13,25 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.dubbo.common.extensionloader.ext2.impl; - +package com.alibaba.dubbo.common.extensionloader.ext2.impl; + import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.common.extensionloader.ext2.Ext2; import com.alibaba.dubbo.common.extensionloader.ext2.UrlHolder; - -/** - * @author ding.lid - */ -public class Ext2Impl1 implements Ext2 { - public String echo(UrlHolder holder, String s) { - return "Ext2Impl1-echo"; - } - - public String yell(URL url, String s) { - return "Ext2Impl1-yell"; - } - - public String bang(URL url, int i) { - return "bang1"; - } + +/** + * @author ding.lid + */ +public class Ext2Impl1 implements Ext2 { + public String echo(UrlHolder holder, String s) { + return "Ext2Impl1-echo"; + } + + public String bang(URL url, int i) { + return "bang1"; + } } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/impl/Ext2Impl2.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/impl/Ext2Impl2.java index 3597345ee62..1fab1393a93 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/impl/Ext2Impl2.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/impl/Ext2Impl2.java @@ -13,27 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.dubbo.common.extensionloader.ext2.impl; - +package com.alibaba.dubbo.common.extensionloader.ext2.impl; + import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.common.extensionloader.ext2.Ext2; import com.alibaba.dubbo.common.extensionloader.ext2.UrlHolder; - -/** - * @author ding.lid - * - */ -public class Ext2Impl2 implements Ext2 { - public String echo(UrlHolder holder, String s) { - return "Ext2Impl2-echo"; - } - - public String yell(URL url, String s) { - return "Ext2Impl2-yell"; - } - - public String bang(URL url, int i) { - return "bang2"; - } - + +/** + * @author ding.lid + * + */ +public class Ext2Impl2 implements Ext2 { + public String echo(UrlHolder holder, String s) { + return "Ext2Impl2-echo"; + } + + public String bang(URL url, int i) { + return "bang2"; + } + } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/impl/Ext2Impl3.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/impl/Ext2Impl3.java index 8f1805ebef5..4253faebf6b 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/impl/Ext2Impl3.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext2/impl/Ext2Impl3.java @@ -13,27 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.dubbo.common.extensionloader.ext2.impl; - +package com.alibaba.dubbo.common.extensionloader.ext2.impl; + import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.common.extensionloader.ext2.Ext2; import com.alibaba.dubbo.common.extensionloader.ext2.UrlHolder; - -/** - * @author ding.lid - * - */ -public class Ext2Impl3 implements Ext2 { - public String echo(UrlHolder holder, String s) { - return "Ext2Impl3-echo"; - } - - public String yell(URL url, String s) { - return "Ext2Impl3-yell"; - } - - public String bang(URL url, int i) { - return "bang3"; - } - + +/** + * @author ding.lid + * + */ +public class Ext2Impl3 implements Ext2 { + public String echo(UrlHolder holder, String s) { + return "Ext2Impl3-echo"; + } + + public String bang(URL url, int i) { + return "bang3"; + } + } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/UseProtolKeyExt.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/UseProtocolKeyExt.java similarity index 95% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/UseProtolKeyExt.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/UseProtocolKeyExt.java index 90a7cd87bbd..1180bd4e504 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/UseProtolKeyExt.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/UseProtocolKeyExt.java @@ -22,8 +22,8 @@ /** * @author ding.lid */ -@SPI("impl3") -public interface UseProtolKeyExt { +@SPI("impl1") +public interface UseProtocolKeyExt { // protocol key在第二个 @Adaptive({"key1", "protocol"}) String echo(URL url, String s); diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl1.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtocolKeyExtImpl1.java similarity index 80% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl1.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtocolKeyExtImpl1.java index c6d002380ef..390af44733d 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl1.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtocolKeyExtImpl1.java @@ -16,17 +16,17 @@ package com.alibaba.dubbo.common.extensionloader.ext3.impl; import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt; +import com.alibaba.dubbo.common.extensionloader.ext3.UseProtocolKeyExt; /** * @author ding.lid */ -public class UseProtolKeyExtImpl1 implements UseProtolKeyExt { +public class UseProtocolKeyExtImpl1 implements UseProtocolKeyExt { public String echo(URL url, String s) { - return "Ext3Impl3-echo"; + return "Ext3Impl1-echo"; } public String yell(URL url, String s) { - return "Ext3Impl3-yell"; + return "Ext3Impl1-yell"; } } \ No newline at end of file diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl2.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtocolKeyExtImpl2.java similarity index 86% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl2.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtocolKeyExtImpl2.java index 1e29a4c1b23..cfd3e2f599d 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl2.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtocolKeyExtImpl2.java @@ -16,13 +16,13 @@ package com.alibaba.dubbo.common.extensionloader.ext3.impl; import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt; +import com.alibaba.dubbo.common.extensionloader.ext3.UseProtocolKeyExt; /** * @author ding.lid * */ -public class UseProtolKeyExtImpl2 implements UseProtolKeyExt { +public class UseProtocolKeyExtImpl2 implements UseProtocolKeyExt { public String echo(URL url, String s) { return "Ext3Impl2-echo"; } diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl3.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtocolKeyExtImpl3.java similarity index 86% rename from dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl3.java rename to dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtocolKeyExtImpl3.java index 0a5f695ff92..ad0bc18e268 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtolKeyExtImpl3.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/extensionloader/ext3/impl/UseProtocolKeyExtImpl3.java @@ -16,13 +16,13 @@ package com.alibaba.dubbo.common.extensionloader.ext3.impl; import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt; +import com.alibaba.dubbo.common.extensionloader.ext3.UseProtocolKeyExt; /** * @author ding.lid * */ -public class UseProtolKeyExtImpl3 implements UseProtolKeyExt { +public class UseProtocolKeyExtImpl3 implements UseProtocolKeyExt { public String echo(URL url, String s) { return "Ext3Impl3-echo"; } diff --git a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.UseProtocolKeyExt similarity index 80% rename from dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt rename to dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.UseProtocolKeyExt index e17f6a2142c..08dc3d72968 100644 --- a/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.UseProtolKeyExt +++ b/dubbo-common/src/test/resources/META-INF/dubbo/internal/com.alibaba.dubbo.common.extensionloader.ext3.UseProtocolKeyExt @@ -1,3 +1,3 @@ -impl1=com.alibaba.dubbo.common.extensionloader.ext3.impl.UseProtolKeyExtImpl1 -impl2=com.alibaba.dubbo.common.extensionloader.ext3.impl.UseProtolKeyExtImpl2 -impl3=com.alibaba.dubbo.common.extensionloader.ext3.impl.UseProtolKeyExtImpl3 \ No newline at end of file +impl1=com.alibaba.dubbo.common.extensionloader.ext3.impl.UseProtocolKeyExtImpl1 +impl2=com.alibaba.dubbo.common.extensionloader.ext3.impl.UseProtocolKeyExtImpl2 +impl3=com.alibaba.dubbo.common.extensionloader.ext3.impl.UseProtocolKeyExtImpl3 \ No newline at end of file