Proxy 代理模式

代理模式

静态代理

Proxy 代理模式 - 图1
代理对象和被代理对象实现同一个接口,代理对象中传入被代理对象,调用代理对象的方法时候同步调用被代理对象的方法,从而在实现原有功能的基础上加一些前置或者后置的操作。

动态代理

代理类为动态生成的,使用jdk的java.lang.reflect.Proxy利用asm生成代理类
采用java.lang.reflect.Proxy

  1. public class test {
  2. public static void main(String[] args) throws InterruptedException {
  3. Car car = new Car();
  4. Movable movable=(Movable)Proxy.newProxyInstance(Car.class.getClassLoader(), Car.class.getInterfaces(), new InvocationHandler() {
  5. @Override
  6. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  7. System.out.println("car befer....");
  8. method.invoke(car,args);
  9. System.out.println("car after....");
  10. return null;
  11. }
  12. });
  13. movable.move();
  14. }
  15. }
  16. interface Movable{
  17. void move();
  18. }
  19. class Car implements Movable{
  20. @Override
  21. public void move() {
  22. System.out.println("car move.....");
  23. }
  24. }

采用cglib的动态代理,可以不用