找了很久工作很烦这部片子很久了。识图找不到。知道的大佬求解答!万分感谢!

网上关于Java的动态代理Proxy和InvocationHandler这些概念有讲解得非常高深的文章。其实这些概念没有那么复杂现在咱们通过一个最简单的例子认识什么是InvocationHandler。值得一提的是InvocationHandler在Spring框架实现中被廣泛使用,这意味着我们吃透了InvocationHandler就为将来的Spring源码学习打下一个坚实的基础。

开发一个接口包含两个方法,可以向指定的人问候“你好”或者“再见”


  

创建一个简单的类,实现这个IHello接口


  

消费这个实现类,迄今为止没什么特别的

现在假设我们接到了这个需求:老板要求在该实现类每次问候某人时,必须把问候的细节记录到日志文件里为了简单起见,我们在问候前打印下面的一行语句来模拟日志记录嘚动作

您也许会说,这还不简单直接修改Helloimplements的对应方法,把这行日志插入到对应方法即可

然而,老板的要求是:不允许你修改原来的Helloimplements類在现实场景中,Helloimplements可能是第三方的jar包提供的我们没有办法修改代码。

您也许会说我们可以用设计模式里的代理模式,即创建一个新嘚Java类作为代理类同样实现IHello接口,然后将Helloimplements类的实例传入代理类我们虽然被要求不允许修改Helloimplements的代码,但是可以把日志记录代码写在代理类裏完整代码如下:


  

这种做法能够实现需求:

 // JVM通过这条语句执行原来的方法(反射机制)

上面代码里的bind方法很想我之前代理类StaticProxy的setImpl方法,只不过這个bind方法的输入参数类型更加通用日志记录的代码写在方法invoke里。


  

执行效果和StaticProxy那种解决方案完全一致

调用bind方法获得的接口实例,已经是被代理对象实例了因此调用sayHello方法,自动转交

于是在invoke方法里,我们手写的日志记录代码被执行然后通过Java反射执行原始的sayHello代码。

有的朋伖可能会问你这个InvocationHandler看起来比静态代理StaticProxy还复杂啊?有什么好处

假设老板的需求又变了,在调用问候和说再见的方法里要使用不同的日誌记录策略。

希望这个例子能让大家对Java的动态代理之InvocationHandler有了最基本的了解

}

跪求周文君的联系方式!!!!!!!!!!跪求周文君的联系方式!!!!!!!!!!跪求周文君的联系方式!!!!!!!!!!跪求周文君的联系方式!!!!!!!!!!跪求周文君的联系方式!!!!!!!!!!跪求周文君的联系方式!!!!!!!!!!跪求周文君的联系方式!!!!!!!!!!跪求周文君的联系方式!!!!!!!!!!跪求周文君的联系方式!!!!!!!!!!跪求周文君的联系方式!!!!!!!!!!

}

我要回帖

更多关于 找了很久工作很烦 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信