1.所有的動(dòng)態(tài)代理,看源碼可知都會(huì)首先生成代理類(lèi)蚊伞,CGLIB的代理類(lèi)是目標(biāo)類(lèi)的子類(lèi),JDK的代理類(lèi)是extend Proxy implement interfaces[] - 這個(gè)就是目標(biāo)類(lèi)(被代理類(lèi))實(shí)現(xiàn)的所有接口
2.生成的代理類(lèi)是存放在內(nèi)存中的脱篙,可以通過(guò)jvm參數(shù)指定輸出到文件中狰腌,然后根據(jù)代理類(lèi)生成代理對(duì)象
3.看一下動(dòng)態(tài)代理的代碼,從代碼看出其實(shí)生成的代理對(duì)象userServiceInterface和被代理類(lèi)是沒(méi)有任何關(guān)系的虐呻,只是在invoke方法里面需要調(diào)用被代理類(lèi)(對(duì)象)的方法象泵。
這也是我們的初衷 - 去增強(qiáng)被代理類(lèi)的方法。
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();