静态代理模式
public interface Counter {
public int add(int a, int b);
}
public class CounterImpl implements Counter{
public int add(int a, int b) {
System.out.println("计算的结果是:" + (a+b));
return a + b;
}
}
public class CounterProxy implements Counter {
private Counter counterImpl;
public CounterProxy(Counter counterImpl){
this.counterImpl = counterImpl;
}
public int add(int a, int b) {
System.out.println("方法执行前添加的方法");
counterImpl.add(a, b);
System.out.println("方法执行后添加的方法");
return 0;
}
}
public class CounterStaticProxyTest {
public static void main(String[] args) {
CounterImpl c = new CounterImpl();
CounterProxy proxy = new CounterProxy(c);
proxy.add(1, 2);
}
}
动态代理模式
public class CounterInvocationHandler implements InvocationHandler {
private Object object;
public CounterInvocationHandler(Object object){
this.object = object;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("方法执行前操作");
Object result = method.invoke(object, args);
System.out.println("方法执行后操作");
return result;
}
}
public class CounterDynaProxyTest {
public static void main(String[] args) {
Counter c = new CounterImpl();
InvocationHandler handle = new CounterInvocationHandler(c);
Counter cp = (Counter)Proxy.newProxyInstance(handle.getClass().getClassLoader(), c.getClass().getInterfaces(), handle);
cp.add(2, 3);
}
}
cglib动态代理模式
public class CounterCglibProxy implements MethodInterceptor{
private Object object;
public Object getInstance(Object object){
this.object = object;
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(this.object.getClass());
enhancer.setCallback(this);
return enhancer.create();
}
public Object intercept(Object object, Method m, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("开始前");
proxy.invokeSuper(object, args);
System.out.println("开始后");
return null;
}
}
public class CounterCglibProxyTest {
public static void main(String[] args) {
CounterImpl c = (CounterImpl)new CounterCglibProxy().getInstance(new CounterImpl());
c.add(3, 4);
}
}