call和Invoke的区别
两者都是 让其他对象执行子流程。
call: 比较明确的调用 (方法名,形参,返回值都是确定的)
invoke: 调用的对象,方法名,参数,返回值都不确定,比较上层建筑的代码常用。
e.g jdk生成动态代理,设计动态代理类是上层建筑代码,负责生成 接口的对象,对象中的所有方法都是调用 invoke方法,来让目标对象做工作。
让哪个目标对象?, 执行那个方法(Method类),方法传参(args)都是未知不确定的,所以用invoke 祈求(本身祈求就是很虚的东西呀),更加符合当前代码的抽象场景
目标对象 = new 目标对象();
代理对象 o = Proxy.newProxyInstance(IUserSerivce.class, new Class[]{IUserSerivce.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
上面增强
目标对象。执行对象
下面增强
return null;
}
});
------------
静心,笃行
------------