通過反射獲取代理物件的其目標物件
阿新 • • 發佈:2019-02-12
這兩天做一個日誌系統,原系統是通過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的什麼辦法我不知道怎麼沒有試驗成功!