实现代码
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DemoMain {
public static void main (String[] args) {
Arithmetic ariImpl = new ArithmeticImpl();
Arithmetic ari = (Arithmetic) Proxy.newProxyInstance(ariImpl.getClass().getClassLoader(),
new Class[] { Arithmetic.class }, new InvocationHandler() {
@Override
public Object invoke (Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method.getName());
Object result = method.invoke(ariImpl, args);
return result;
}
});
System.out.println(ari.add(2 , 3 ));
}
}
jdk代理方式实现
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* JDK动态代理类
*/
public class JDKProxy implements InvocationHandler {
private Object targetObject;
public Object newProxy (Object targetObject) {
this .targetObject = targetObject;
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(), this );
}
public Object invoke (Object proxy, Method method, Object[] args)//invoke方法
throws Throwable {
checkPopedom();
Object ret = null ;
ret = method.invoke(targetObject, args);
return ret;
}
private void checkPopedom () {
System.out.println(".:检查权限 checkPopedom()!" );
}
}
CGLIB动态代理
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
/**
* CGLibProxy动态代理类的实例
*/
public class CGLibProxy implements MethodInterceptor {
private Object targetObject;
public Object createProxyObject (Object obj) {
this .targetObject = obj;
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(obj.getClass());
enhancer.setCallback(this );
Object proxyObj = enhancer.create();
return proxyObj;
}
public Object intercept (Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
Object obj = null ;
if ("addUser" .equals(method.getName())) {
checkPopedom();
}
obj = method.invoke(targetObject, args);
return obj;
}
private void checkPopedom () {
System.out.println(".:检查权限 checkPopedom()!" );
}
}
接口
public interface Arithmetic {
int add(int a,int b);
int sub(int a,int b);
int mul(int a,int b);
int div(int a,int b);
}
继承接口
public class ArithmeticImpl implements Arithmetic {
@Override
public int add (int a, int b) {
return a+b;
}
@Override
public int sub (int a, int b) {
return a-b;
}
@Override
public int mul (int a, int b) {
return a*b;
}
@Override
public int div (int a, int b) {
if (b!=0 )
return a/b;
else
return 0 ;
}
}
实现