Jdk动态代理
1、创建接口
package com.cn.fb.proxy2;
public interface Calculate {
public int add(int a, int b);
public int subtract(int a, int b);
public int multiply(int a, int b);
public int divide(int a, int b);
}
2、创建接口实现类
package com.cn.fb.proxy2;
public class MyCalculate implements Calculate {
@Override
public int add(int a, int b) {
return a + b;
}
@Override
public int subtract(int a, int b) {
return a - b;
}
@Override
public int multiply(int a, int b) {
return a * b;
}
@Override
public int divide(int a, int b) {
return a / b;
}
}
3、创建代理类
package com.cn.fb.proxy2;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class JdkDynamicProxy implements InvocationHandler {
private Object obj;
public JdkDynamicProxy(Object obj) {
this.obj = obj;
}
public Object getProxy() {
final ClassLoader classLoader = obj.getClass().getClassLoader();
final Class<?>[] interfaces = obj.getClass().getInterfaces();
final Object o = Proxy.newProxyInstance(classLoader, interfaces, this);
return o;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
begin();
Object invoke = method.invoke(obj, args);
System.out.println("method.invoke");
commit();
return invoke;
}
public void begin() {
System.out.println("=======开启事务=======");
}
public void commit() {
System.out.println("=======提交事务=======");
}
}
4、Test
package com.cn.fb.proxy2;
public class Test {
public static void main(String[] args) {
MyCalculate myCalculate = new MyCalculate();
final Calculate calculate = (Calculate) new JdkDynamicProxy(myCalculate).getProxy();
System.out.println(calculate.add(10, 20));
}
}
5、执行结果