package io.anyway.galaxy.util;

import io.anyway.galaxy.proxy.ProxyFactory;
import io.anyway.galaxy.proxy.TXOperationProxy;

import java.lang.reflect.Method;

/**
 * Created by xiong.j on 2016/7/25.
 */
public class ProxyUtil {

    /**
     * 动态代理方法调用
     *
     * @param target 目标对象
     * @param methodName 方法名
     * @param types 参数类型
     * @param args 参数值
     * @throws Throwable
     */
    public static void proxyMethod(Object target, String methodName, Class<?>[] types, Object[] args) throws Throwable {
        Method method = target.getClass().getMethod(methodName, types);
        method.invoke(target, args);
    }

    /**
     * 静态代理方法调用TXOperationProxy.invokeCancel
     *
     * @param target 目标对象
     * @param types 参数类型
     * @param args 参数值
     * @throws Throwable
     */
    public static void invokeCancel(Object target, Class<?>[] types, Object[] args) throws Throwable {
        TXOperationProxy txOperationProxy = ProxyFactory.getProxy(target, TXOperationProxy.class, types);
        txOperationProxy.invokeCancel(target, args);
    }

    /**
     * 静态代理方法调用TXOperationProxy.invokeConfirm
     *
     * @param target 目标对象
     * @param types 参数类型
     * @param args 参数值
     * @throws Throwable
     */
    public static void invokeConfirm(Object target, Class<?>[] types, Object[] args) throws Throwable {
        TXOperationProxy txOperationProxy = ProxyFactory.getProxy(target, TXOperationProxy.class, types);
        txOperationProxy.invokeConfirm(target, args);
    }
}

@@ -116,16 +116,65 @@
 onProxy;
+%0Aimport org.springframework.util.ReflectionUtils;
 %0A%0Aimport
@@ -397,32 +397,54 @@
 @param args %E5%8F%82%E6%95%B0%E5%80%BC%0A
+     * @return Object%0A
      * @throws T
@@ -444,32 +444,39 @@
 hrows Throwable%0A
+     *%0A
      */%0A    publ
@@ -485,20 +485,22 @@
  static 
-void
+Object
  proxyMe
@@ -614,16 +614,43 @@
 ethod = 
+ReflectionUtils.findMethod(
 target.g
@@ -662,19 +662,9 @@
 ss()
-.getMethod(
+,
 meth
@@ -670,17 +670,16 @@
 hodName,
- 
 types);%0A
@@ -690,30 +690,106 @@
     
-method.invoke(
+ReflectionUtils.makeAccessible(method);%0A        return ReflectionUtils.invokeMethod(method,
 target,
- 
 args

modify invoke method,makeAccess