import com.wyz.bean.BaseVo; import net.sf.cglib.beans.BeanGenerator; import org.junit.Test; import java.lang.reflect.Method; public class MyTest1 { @Test public void test01() throws Exception { BeanGenerator beanGenerator = new BeanGenerator(); beanGenerator.setSuperclass(BaseVo.class); beanGenerator.addProperty("value", String.class); BaseVo myBean = (BaseVo) beanGenerator.create(); Method setter = myBean.getClass().getMethod("setValue", String.class); setter.invoke(myBean, "张三1"); BaseVo myBean1 = (BaseVo) beanGenerator.create(); // Method setter1 = myBean.getClass().getMethod("setValue", String.class); // setter1.invoke(myBean1, "张三2"); // for (Method m :myBean.getClass().getMethods()){ // System.out.println(m.getName()); // } // // Method toString = myBean.getClass().getMethod("toString"); // System.out.println(toString.invoke(myBean, null)); // // Method getter = myBean.getClass().getMethod("getValue"); // System.out.println(getter.invoke(myBean)); System.out.println(myBean); System.out.println(myBean.equals(myBean1)); // System.out.println(myBean.hashCode()); } } package com.wyz.bean; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class BaseVo{ /** * 指示其他某个对象是否与此对象“相等” */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || this.getClass() != obj.getClass()) return false; try { for (Method method : this.getClass().getMethods()) { String methodName = method.getName(); // 过滤Bean类字段的get方法 if (methodName.startsWith("get") && !methodName.equals("getClass")) { // 获取被比较对象的字段值 Method objGetMethod = obj.getClass().getMethod(methodName); // 执行方法以获取返回值比较(关键点:注意参数不相同) Object objProperty = objGetMethod.invoke(obj); Object thisProperty = method.invoke(this); // 空值报异 if (objProperty == null) { System.err.println("异常信息:类" + obj.getClass().getName() + "中的" + methodName + "方法为null值!无法进行对象比较!"); } if (thisProperty == null) { System.err.println("异常信息:类" + this.getClass().getName() + "中的" + methodName + "方法为null值!无法进行对象比较!"); } // 返回值不相等则返回逻辑假 if (!thisProperty.equals(objProperty)) { return false; } } } } catch (Exception e) { e.printStackTrace(); return false; } return true; } /** * 返回该对象的哈希码值 */ @Override public int hashCode() { // 生成简单的位运算hash散列码 String key = this.toString(); int prime = key.hashCode(); int hash = prime; for (int i = 0; i < key.length(); i++) { hash ^= (hash << 23 >> 17) ^ key.charAt(i) * 13131; } // 返回结果 return (hash % prime) * 33; } /** * 返回该对象的字符串表示(类似数组的toString方法输出结果) */ @Override public String toString() { // 当前类反射方法组 Method[] methodGroup = this.getClass().getMethods(); // toString内容 StringBuffer content = new StringBuffer("{"); try { // 遍历反射方法组并提取属性的getter方法 for (Method method : methodGroup) { // 过滤与属性无关的get方法 String methodName = method.getName(); if (methodName.startsWith("get") && !methodName.equals("getClass")) { String propName = methodName.substring(3).toLowerCase(); content.append(propName); content.append("="); content.append(method.invoke(this)); content.append(","); } } content.append("}"); } catch (IllegalAccessException ex) { System.err.println("异常信息:参数错误,对象定义无法访问,无法反射性地创建一个实例! " + ex.getMessage()); } catch (IllegalArgumentException ex) { System.err.println("异常信息:参数错误,向方法传递了一个不合法或不正确的参数! " + ex.getMessage()); } catch (InvocationTargetException ex) { System.err.println("异常信息:参数错误,由调用方法或构造方法所抛出异常的经过检查的异常! " + ex.getMessage()); } // 返回结果 return content.toString(); } }