1. 程式人生 > >通過反射獲取代理物件的其目標物件

通過反射獲取代理物件的其目標物件

這兩天做一個日誌系統,原系統是通過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的什麼辦法我不知道怎麼沒有試驗成功!