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!!!