您的位置:首页 > 职场人生

黑马程序员 【】java学习之路——代理小结

2014-09-16 12:25 393 查看
-------android培训java培训、期待与您交流! ----------

第一次看代理说实话是一点也没看懂,听的云里雾里的,没办法接着看第二遍吧,第二遍看完终于能看明白点,呵呵,好笨啊!只能接着看第三遍!第三遍代理视频看完,感觉张老师讲的还是挺不错的,还挺幽默!就这样,我基本上是看懂了,能写出基本的代理了!那就抓紧总结下,以便于记忆强化和以后复习啊!给自己加点油!O(∩_∩)O哈哈~

一:为什么要有代理呢?代理有什么功能呢?

因为在实际生活中,已经写好 的程序可能需要添加一些新的功能,比如添加异常处理、日志记录等等,但是我们并没有程序的源码,不能在源程序上进行,修改了!那怎么办呢?这是就出现了代理。

编写一个与目标类具有相同接口的代理,此代理的每个方法都调用目标类的相同方法,并且在调用的时候就可以添加一些附属功能,这就解决了我们没有程序源码,但是还可以对程序添加一些新的功能的需求。

二:静态代理和动态代理

个人理解为:静态代理就是我们为需要的代理的每个类去手工的添加代理类,这样不仅效率低,而且非常累。

动态代理:就是 让JVM在运行时期动态的生成出类的字节码,这种动态生成的类往往被用作代理类,即动态代理。

动态代理的好处:效率高,并且实现很轻松。

三:如何实现动态代理:

首先我们需要考虑让JVM创建动态代理。我们需要为其提供哪些参数:

1:类加载器——因为是在内存中直接生成字节码,所以并没有类加载器,此时就需要我们制定使用哪个类加载器。

2:实现哪些接口——因为我们并不知道我们代理的目标有哪些方法,但是我们实现了和目标一样的接口或继承了类,则 我们就具有和目标相同的方法。总之为动态代理提供接口就是为了让代理具有和目标相同的方法声明。

3:实现InvocationHandler接口——此接口简言之就是代理和目标之间连接的桥梁(我这么说不知道准确不准确)

四:代理的实现原理:

根据需要动态的创建 代理类,并实现上述的三个方面。

客户端调用代理或者说客户端调用代理的某个方法,代理把该方法和调用的参数传递给InvocationHandler的实现类,InvocationHandler在调用目标相对应的方法,然后接收返回值,并把返回值传递给代理,然后代理再把结构返回给客户端。这就是代理的简单工作原理。

五:创建代理实例的三种方式

第一种:

1:获得构造函数

2:书写一个内部类实现InvocationHandler接口

3:创建代理实例对象

第二种:

1;获得构造函数

2:创建代理实例对象,并且以匿名内部类的形式实现InvocationHandler接口

第三种:

直接利用Proxy的静态方法newProxyInstance创建代理实例对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: