java动态代理demo

18 阅读1分钟

java的动态代理是基于接口的,流程如下:

1. 声明一个接口

public interface UserService {  
    String myName(String name);  
}

2. 实现类

public class UserServiceImpl implements UserService {  
    @Override  
    public String myName(String name) {  
        System.out.println("hello,i'm " + name);  
        return name;  
    }  
}

3. 声明handler类

需实现InvocationHandler接口

public class Invo implements InvocationHandler {  
  
    private Object target;  
  
    public Invo(Object target) {  
        this.target = target;  
    }  
  
    @Override  
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
        System.out.println("before!!!");  
        Object o = method.invoke(target, args);  
        System.out.println("after!!!");  
        return o;  
    }  
  
    public Object getProxy(){  
        return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), target.getClass().getInterfaces(), this);  
    }  
}

4. 使用

public static void main(String[] args) {  
    UserService userService = new UserServiceImpl();  
    Invo invo = new Invo(userService);  
    UserService proxy = (UserService) invo.getProxy();  
    proxy.myName("duo he shui");  
}

5.运行结果

before!!!
hello,i'm duo he shui
after!!!