extract 2 methods: (#3453)
authorwanghbxxxx <wanghbxxxx@gmail.com>
Tue, 12 Feb 2019 07:52:38 +0000 (15:52 +0800)
committerkexianjun <kexianjun1991@hotmail.com>
Tue, 12 Feb 2019 07:52:38 +0000 (15:52 +0800)
isSetter: test if a method is a setter
getSetterProperty: get property for setter, for instance setVersion
return "version"

dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java

index 1b36047..36c7707 100644 (file)
@@ -544,9 +544,7 @@ public class ExtensionLoader<T> {
         try {\r
             if (objectFactory != null) {\r
                 for (Method method : instance.getClass().getMethods()) {\r
-                    if (method.getName().startsWith("set")\r
-                            && method.getParameterTypes().length == 1\r
-                            && Modifier.isPublic(method.getModifiers())) {\r
+                    if (isSetter(method)) {\r
                         /**\r
                          * Check {@link DisableInject} to see if we need auto injection for this property\r
                          */\r
@@ -558,7 +556,7 @@ public class ExtensionLoader<T> {
                             continue;\r
                         }\r
                         try {\r
-                            String property = method.getName().length() > 3 ? method.getName().substring(3, 4).toLowerCase() + method.getName().substring(4) : "";\r
+                            String property = getSetterProperty(method);\r
                             Object object = objectFactory.getExtension(pt, property);\r
                             if (object != null) {\r
                                 method.invoke(instance, object);\r
@@ -576,6 +574,30 @@ public class ExtensionLoader<T> {
         return instance;\r
     }\r
 \r
+    /**\r
+     * get properties name for setter, for instance: setVersion, return "version"\r
+     * <p>\r
+     * return "", if setter name with length less than 3\r
+     */\r
+    private String getSetterProperty(Method method) {\r
+        return method.getName().length() > 3 ? method.getName().substring(3, 4).toLowerCase() + method.getName().substring(4) : "";\r
+    }\r
+\r
+    /**\r
+     * return true if and only if:\r
+     * <p>\r
+     * 1, public\r
+     * <p>\r
+     * 2, name starts with "set"\r
+     * <p>\r
+     * 3, only has one parameter\r
+     */\r
+    private boolean isSetter(Method method) {\r
+        return method.getName().startsWith("set")\r
+                && method.getParameterTypes().length == 1\r
+                && Modifier.isPublic(method.getModifiers());\r
+    }\r
+\r
     private Class<?> getExtensionClass(String name) {\r
         if (type == null) {\r
             throw new IllegalArgumentException("Extension type == null");\r