我想问下这里不明白
来源:2-1 JDK的动态代理
qq_蓝骏毅_04076633
2018-10-24 22:48:03
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if("save".equals(method.getName())) { System.out.println("权限校验...."); return method.invoke(userDao, args); } return method.invoke(userDao, args); }
这里也不太明白 public Object createProxy() { Object proxy = Proxy.newProxyInstance(userDao.getClass().getClassLoader(), userDao.getClass().getInterfaces(), this); return proxy; }
1回答
chrismorgen
2018-10-25
如下代码是创建userDao的代理对象,可以通过Proxy类中的newProxyInstance来创建代理对象,newProxyInstance方法中需要传递3个参数,第一个参数是类的加载器,第二个参数是userDao的所有接口,第三个参数就是InvocationHandler接口,这样通过调用createProxy方法就可以获得一个userDao的动态代理对象了。
public Object createProxy() { Object proxy = Proxy.newProxyInstance(userDao.getClass().getClassLoader(), userDao.getClass().getInterfaces(), this); return proxy; }
invoke方法是InvocationHandler接口中的方法,在该方法中可以对目标对象进行增强。
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if("save".equals(method.getName())) { System.out.println("权限校验...."); return method.invoke(userDao, args); } return method.invoke(userDao, args); }
通过描述以上代码,可以看出他的作用是什么,在视频中14分钟出左右,在demo1中创建了UserDao的代理对象proxy,也就是通过MyJDKProxy类中的createProxy方法来获取的UserDao代理对象,然后让proxy代理对象去执行save方法,默认的就会调用invoke方法进行方法增强,当方法为save方法时,就会执行权限校验了。祝学习愉快~
相似问题