JDK 动态代理应用

1.所有的动态代理,看源码可知都会首先生成代理类,CGLIB的代理类是目标类的子类,JDK的代理类是extend Proxy implement interfaces[] - 这个就是目标类(被代理类)实现的所有接口

2.生成的代理类是存放在内存中的,可以通过jvm参数指定输出到文件中,然后根据代理类生成代理对象

3.看一下动态代理的代码,从代码看出其实生成的代理对象userServiceInterface和被代理类是没有任何关系的,只是在invoke方法里面需要调用被代理类(对象)的方法。

这也是我们的初衷 - 去增强被代理类的方法。

class UserService implements UserServiceInterface{};

UserService userService = new UserService();

UserServiceInterface userServiceInterface  = (UserServiceInterface) Proxy.newProxyInstance(JDKTester.class.getClassLoader(), new Class[]{UserServiceInterface.class}, new InvocationHandler() {

@Override

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

System.out.println("proxy before method");

method.invoke(userService, args);

return null;

}

});

userServiceInterface.order();

你可能感兴趣的:(JDK 动态代理应用)