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 }