这两天做一个日志系统,原系统是通过SSH框架开发的,Spring获取的实体类的Object 是一个代理对象,并不能获取目标对象的属性,试了半天,想了一个比较笨的方法。
public String getPkNameByObj(Object obj) throws Exception{
Class<?> cls = obj.getClass();
String clsPathName = cls.getName();
for(int i=0;i<3;i++){
clsPathName = clsPathName.substring(0,clsPathName.lastIndexOf("_"));
}
Class<?> entity = Class.forName(clsPathName);
Field[] fields = entity.getDeclaredFields();
for(int i=0;i<fields.length;i++){
String fieldName = fields[i].getName();
if(fieldName.toUpperCase().equals(PkName)){
Method method = cls.getMethod("XXX");
String value = (String) method.invoke(obj, new Object[]{});
return value;
}
}
}
这个办法虽然比较笨,但是还是能正确的获取到目标对象中各个属相的值得,网上通过AOP的什么办法我不知道怎么没有试验成功!