動態代理設計模式經常使用的有兩種實現,一種是JDK自帶的動態代理,另外一種就是cglib的動態代理。java
區別:JDK動態代理的被代理對象必定要有接口,經過動態生成接口實現類而後經過組合的方式實如今方法先後do something.設計模式
cglib經過繼承的關係來實如今方法先後do something.ide
JDK動態代理的使用:this
1.接口和實現類設計
public interface Service { Integer getSum(Integer a, Integer b); } public class ServiceImpl implements Service { public Integer getSum(Integer a, Integer b) { return a + b; } }
2.代理處理類 須要實現Invocation接口代理
public class MyInvocationHandler implements InvocationHandler { private Object object; public MyInvocationHandler(Object object) { this.object = object; } @Override public Object invoke(Object paramObject, Method paramMethod, Object[] paramArrayOfObject) throws Throwable { System.out.println(paramMethod.getName() + "start......"); Object result = paramMethod.invoke(object, paramArrayOfObject); System.out.println(paramMethod.getName() + "end......"); return result; } }
3.使用
code
public class Test { public static void main(String[] args) { Service service = new ServiceImpl(); MyInvocationHandler handler = new MyInvocationHandler(service); Service proxy = (Service) Proxy.newProxyInstance(service.getClass() .getClassLoader(), service.getClass().getInterfaces(), handler); Integer result = proxy.getSum(1, 2); System.out.println("result is " + result); } }