关于return的问题
以下代码的return子句到底返回什么东西?无论是校验还是不校验,之后不都是执行method.invoke(userDao,args)方法,相当于执行save()、delete()等就可以吗?请老师详细解释一下,谢谢!
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);
}方法吗?
正在回答
同学你好!
首先无乱if语句是否执行,都会调用return method.invoke(userDao,args);来执行以及返回
之所以写if的原因是为了在执行save方法之前进行校验。这里的:
System.out.println("权限校验");语句相当于是执行一次权限校验。
综上所述:如果不是save方法,直接执行,如果是save方法,对权限进行校验之后再执行
这个案例中,在if中也可以不写return method.invoke(userDao,args);直接写在if外面也可以,它们的最终效果是一样的,比如:
if ("save".equals(method.getName())){ System.out.println("权限校验"); } return method.invoke(userDao,args); }
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
同学你好,method.invoke(userDao,args) 的作用是调用被增强的类的原本对应的方法,而return是返回则是将其返回。这里的save(),delete()方法都是没有返回值的,所以调用method.invoke()后return null也可以正常运行。如:
但是有些方法是有返回值的,如果这里没有mothod.invoke()的结果返回,那么将会得到一个null值,如:
save()方法改为有返回值的方法,如:
代理类中没有返回method.invoke();,如:
运行结果:
代理类修改为return method.invoke(),
再次运行,如:
所以这里的return是返回增强后的结果。
祝:学习愉快~
- 参与学习 人
- 提交作业 205 份
- 解答问题 4317 个
Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星