1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.apache.ibatis.reflection.invoker;
17  
18  import java.lang.reflect.InvocationTargetException;
19  import java.lang.reflect.Method;
20  
21  import org.apache.ibatis.reflection.Reflector;
22  
23  
24  
25  
26  public class MethodInvoker implements Invoker {
27  
28    private final Class<?> type;
29    private final Method method;
30  
31    public MethodInvoker(Method method) {
32      this.method = method;
33  
34      if (method.getParameterTypes().length == 1) {
35        type = method.getParameterTypes()[0];
36      } else {
37        type = method.getReturnType();
38      }
39    }
40  
41    @Override
42    public Object invoke(Object target, Object[] args) throws IllegalAccessException, InvocationTargetException {
43      try {
44        return method.invoke(target, args);
45      } catch (IllegalAccessException e) {
46        if (Reflector.canControlMemberAccessible()) {
47          method.setAccessible(true);
48          return method.invoke(target, args);
49        } else {
50          throw e;
51        }
52      }
53    }
54  
55    @Override
56    public Class<?> getType() {
57      return type;
58    }
59  }