PropertyNamer测试,主要是配合动态代理,判断方法的类型和和根据方法获取对应的操作属性。
public class PropertyNamerTest {
public static void main(String[] args) {
System.out.println("将方法名转化为属性名getter或者setter:"
+PropertyNamer.methodToProperty("setName"));
System.out.println("将方法名转化为属性名is:"
+PropertyNamer.methodToProperty("isName"));
System.out.println("判断方法是不是getter或者setter:"
+PropertyNamer.isProperty("setName"));
System.out.println("判断方式是否是get:"
+PropertyNamer.isGetter("setName"));
System.out.println("判断方式是否是set:"
+PropertyNamer.isSetter("setName"));
}
}
执行效果
将方法名转化为属性名getter或者setter:name
将方法名转化为属性名is:name
判断方法是不是getter或者setter:true
判断方式是否是get:false
判断方式是否是set:true
PropertyNamer的源码如下:
package org.apache.ibatis.reflection.property;
import java.util.Locale;
import org.apache.ibatis.reflection.ReflectionException;
/**
* @author Clinton Begin
* 属性(包括属性方法)名称处理器
*/
public final class PropertyNamer {
private PropertyNamer() {
// Prevent Instantiation of Static Class
}
// 将方法名转化为属性名
public static String methodToProperty(String name) {
if (name.startsWith("is")) {
name = name.substring(2);
} else if (name.startsWith("get") || name.startsWith("set")) {
name = name.substring(3);
} else {
throw new ReflectionException("Error parsing property name '" + name + "'. Didn't start with 'is', 'get' or 'set'.");
}
// 将方法名中属性的大小写修改正确
if (name.length() == 1 || (name.length() > 1 && !Character.isUpperCase(name.charAt(1)))) {
name = name.substring(0, 1).toLowerCase(Locale.ENGLISH) + name.substring(1);
}
return name;
}
// 判断方法是不是getter或者setter
public static boolean isProperty(String name) {
return isGetter(name) || isSetter(name);
}
//
public static boolean isGetter(String name) {
return (name.startsWith("get") && name.length() > 3) || (name.startsWith("is") && name.length() > 2);
}
public static boolean isSetter(String name) {
return name.startsWith("set") && name.length() > 3;
}
}