code: public Annotation buildAnnotation(final Class<?> annoClass, final AnnotationInfo info) throws AnnotationReadException {
          
          final Map<String, Object> defaultValues = new HashMap<>();
          for(Method method : annoClass.getMethods()) {
              final Object defaultValue = method.getDefaultValue();
              if(defaultValue != null) {
                  defaultValues.put(method.getName(), defaultValue);
              }
          }
          
          final Map<String, Object> xmlValues = new HashMap<>();
          for(String key : info.getAttributeKeys()) {
              try {
                  Object value = Ognl.getValue(info.getAttribute(key), ognlContext, new Object());
                  xmlValues.put(key, value);
              } catch(OgnlException e) {
                  throw new AnnotationReadException(String.format("fail annotation attribute %s with ognl.", key), e);
              }
          }
          
          ClassLoader loader = classLoader;
          if(loader == null){
              loader = Thread.currentThread().getContextClassLoader();
          }
          
          Object obj = Proxy.newProxyInstance(loader, new Class[]{annoClass},
                  new InvocationHandler() {
                      @Override
                      public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
                          String name = method.getName();
                          if (name.equals("annotationType")) {
                              return annoClass;
                          } else if(xmlValues.containsKey(name)){
                              return xmlValues.get(name);
                          } else {
                              return defaultValues.get(name);
                          }
                      }
          });
          
          return (Annotation) obj;
      }
docs: 指定したアノテーションのクラス情報から、アノテーションのインスタンスを組み立てる。
  @param annoClass アノテーションのクラス
  @param info アノテーションの情報
  @return アノテーションのインスタンス。
  @throws AnnotationReadException