动态代理
@Test
public void test3() {
//产生一个猫的代理
ICat cat = new Cat();
//interfaces ---- 要的是真实哪个类的代理对象
ICat proxyCat = (ICat) Proxy.newProxyInstance(MethodEnhancement.class.getClassLoader(), cat.getClass().getInterfaces(),new InvocationHandler() {
//proxy ---- 代理对象
//method ---- 把要去加强的方法当做一个对象传递进来了
//args ---- 方法里的参数,封装到一个object数组对象传进来了
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if(method.getName().equals("run")) {
//说明调用的是run方法
System.out.println("我家的小猫真是猫中的战斗机");
//调用原有的逻辑
return method.invoke(cat, args);
}
//其他方法正常执行
return method.invoke(cat, args);
}
});
//proxyCat代理猫
//当调用了代理对象的任何方法,都会执行invoke方法里的逻辑
proxyCat.run();
//proxyCat.hashCode();
}
网友评论