Mybatis PropertyNamer属性名称处理器的使用

PropertyNamer是一个工具类,用于处理Java方法名,特别是与动态代理相关的getter和setter方法。它能将方法名转换为对应的属性名,并判断方法是否为getter或setter。例如,setName被转化为属性name,并且确认isName是is-getter方法,而setName是setter方法。
摘要由CSDN通过智能技术生成

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;
  }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值