Java动态代理 InvocationHandler接口的invoke方法,是JDK实现的方法,还是程 序员自己实现的invoke方法。
publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{System.out.p...
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("调用被代理对象的方法是:"+method.getName()
+" "+method.getDeclaringClass());
System.out.println("之前设置新行为" );
method.invoke(sub,args); //动态调用被代理类的行为方法。
System.out.println("之后设置新行为" );
return null;
}
method.invoke(sub,args); 这个方法是实现的那里的 invoke 方法。
就是public Object invoke(Object proxy, Method method, Object[] args)
这三个参数,我对应不上,还不知道 invoke 方法是JDK 自己提供的方法实现,还
是程序员自己写的代码去实现接口的方法invoke。
method.invoke(sub,args)----是不是就是InvocationHandler接口的invoke方法
里的参数,还是具体方法。
我是初学着,没理解上去啊,请高手解答一下,谢谢啦。 展开
throws Throwable {
System.out.println("调用被代理对象的方法是:"+method.getName()
+" "+method.getDeclaringClass());
System.out.println("之前设置新行为" );
method.invoke(sub,args); //动态调用被代理类的行为方法。
System.out.println("之后设置新行为" );
return null;
}
method.invoke(sub,args); 这个方法是实现的那里的 invoke 方法。
就是public Object invoke(Object proxy, Method method, Object[] args)
这三个参数,我对应不上,还不知道 invoke 方法是JDK 自己提供的方法实现,还
是程序员自己写的代码去实现接口的方法invoke。
method.invoke(sub,args)----是不是就是InvocationHandler接口的invoke方法
里的参数,还是具体方法。
我是初学着,没理解上去啊,请高手解答一下,谢谢啦。 展开
1个回答
展开全部
method.invoke 是Java反射里面的知识
就是把这个method激活。 sub这包含这个method的对象。 args就是这个method的参数值(被封装成了Object)
举个例子,有个类A,实例一个对象a,类里有个public void say(String str) 的方法,获得这个method为say后:
method.invoke(a,new Object[]{"this is string"});
即等同于
a.say("this is string")
就是把这个method激活。 sub这包含这个method的对象。 args就是这个method的参数值(被封装成了Object)
举个例子,有个类A,实例一个对象a,类里有个public void say(String str) 的方法,获得这个method为say后:
method.invoke(a,new Object[]{"this is string"});
即等同于
a.say("this is string")
追问
你说的把method激活,是指public Object invoke(Object proxy, Method“ method”, Object[] args) 是指把 这个参数激活吗。 还是指method.invoke(sub,args) 激活这个反射。
还有一点,我还没弄懂, public Object invoke(Object proxy, Method method, Object[] args) 这个方法 是InvocationHandler接口里的。用接口的话,方法必须实现的。 那这个invoke方法是在那个类里实现的啊。 还就是编程的人,自己在编写Iinvoke的。
追答
1.我说的method激活是 method.invoke(sub,args)
2.动态代理截获某个方法,在方法前方法后加东西,方法执行还是要自己 method.invoke(sub,args)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询