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();