兩者都是 讓其他對象執行子流程。
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;
}
});