private static DatabaseFieldConfig buildConfig(DatabaseField databaseField,String tableName,Field field) throws Exception {
  InvocationHandler proxy=Proxy.getInvocationHandler(databaseField);
  if (proxy.getClass() != annotationFactoryClazz) {
    return null;
  }
  Object elementsObject=elementsField.get(proxy);
  if (elementsObject == null) {
    return null;
  }
  DatabaseFieldConfig config=new DatabaseFieldConfig(field.getName());
  Object[] objs=(Object[])elementsObject;
  for (int i=0; i < configFieldNums.length; i++) {
    Object value=valueField.get(objs[i]);
    if (value != null) {
      assignConfigField(configFieldNums[i],config,field,value);
    }
  }
  return config;
}

private static DatabaseFieldConfig buildConfig ( DatabaseField databaseField , String tableName , Field field ) throws Exception { InvocationHandler proxy = Proxy . getInvocationHandler ( databaseField ) ; if ( proxy . getClass ( ) != annotationFactoryClazz ) { return null ; } Object elementsObject = elementsField . get ( proxy ) ; if ( elementsObject == null ) { return null ; } DatabaseFieldConfig config = new DatabaseFieldConfig ( field . getName ( ) ) ; Object [ ] objs = ( Object [ ] ) elementsObject ; for ( int i = 0 ; i < configFieldNums . length ; i ++ ) { Object value = valueField . get ( objs [ i ] ) ; if ( value != null ) { assignConfigField ( configFieldNums [ i ] , config , field , value ) ; } } return config ; }
instead of calling the annotation methods directly , we peer inside the proxy and investigate the array of annotationmember objects stored by the annotationfactory .
