java动态代理的学习和理解

Start

最新在学习Spring,知道他是一个IoC的容器,支持AOP的编程方式,在理解AOP上又一个重要的概念就是动态代理发现自己好多东西还是不懂呀。学习下。

总结

为啥要引入总结,而不是直接把知识点来龙去脉什么的弄下来。因为 通过大学这四年(还没到呢:))的学习包括最后的考研,你会体会得到:知识的学习或者是技术的掌握和技术的提出和知识的提出通常不是一个反向的过程,大多数的情况下甚至是完全背道而驰的!!!具体就不展开了说了,慢慢体会…..

引入

先把我最后学到的东西简单直接粗暴的放到这 , 代理是一种设计模式,就是A类本来实现了一个方法a(),现在要求在A的a()方法调用之前或者之后再执行一些其他的业务逻辑a1();,这样的话你可以:

  1. 直接修改源代码

  2. 让A1类继承自A,然后@override a() method.

  3. 写一个接口,里面有a() ,然后A和B都实现这个接口,在B中保存A的一个对象,B中实现a()方法的具体过程中会调用A的a() 方法

以上三种方式都是可以的,但是如果没有源代码怎么办?或者不能修改源码呢? so, pass 1;

继承的方法是挺好的,但是如果要修改的类很多,你每个都要继承一个写一个新的?! 并且项目中一直有这么一个强调就是慎用继承 ,这样写出来的代码耦合性太强,牵一发而动全身。so, pass2;

第三种方法使用了接口,可以说是完美的,美中不足依旧是这样会导致冗余代码太多,同样的业务逻辑还要实现一遍,你会发现技术的发展无非就是那么几个主要的驱动力:少些多余的工作就是其中一个 , 我们想程序能够动态的生成程序,bingo!!! 你是不想想到了反射,没错,就是他!
第三种方法我们也叫作 静态代理


动态代理具体实现

总的来说动态代理的实现分两种一是jdk的实现,基于接口。二是cglib的实现,基于继承。我主要说一下jdk的实现

主要包含一个类Proxy和一个接口InvocationHandler,实现InvocationHandler接口的handler类根据你的委托类返回一个代理类。调用代理类的invoke方法即可。handler对象要overrideinvoke方法,介入自己的具体的逻辑。一定要定义接口,因为是基于接口对的。框图如下所示:

DP

实例代码如下:(待会儿就贴上

详细学习

推荐这几篇博客:
1. http://blog.csdn.net/luanlouis/article/details/24589193

2.http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html

3.http://www.infoq.com/cn/articles/cf-java-reflection-dynamic-proxy
这本书希望有空能读一下。

End

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值