我想问下这里不明白
来源: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方法时,就会执行权限校验了。祝学习愉快~

相似问题