面向方法编程AOP学习之三 —— “进化论”
引言:
?????? 继前一节(面向方法编程AOP学习之二 —— “原始时代”)的学习引发了一些思考,如前面总结所说的,商人老板无法接受为了一个表演家,就要造一个剧院,这样的成本实在太高太高了,这里需要做的是一个剧院可以允许不同的表演者表演不同的节目,这才是真正的一种进化,才是一种进步。
?
主题:
?????? JDK的动态代理
?
描述:
?????? 在JDK1.3开始,就出现了动态代理的实现,jdk提供了java.lang.reflect.InvocationHandler这么样的一个接口来动态的实现,在执行某方法时,去处理一些事情。
?
场景制造:
?????? 如前一节的场景,这个老板又找到了一个新的表演家,这个表演家不仅仅只会一个表演能力,他会吉他,会钢琴。这时,老板把他带到了一个大的剧院里面,这里面的设备齐全,道具都有都,任由表演家天马行空。
?
角色:
??来一场演出吧
?
?
再一次的演出:
?
?? 同上
?
演示结果:
?
shell many tickets begin =>playGuitarplaying guitar... end =>playGuitargive a little money to player.shell many tickets begin =>playPianoplaying piano... end =>playPianogive a little money to player.?
总结2:
?? ?? 从第二步,进入了新的改造,在这里,把剧院(代理类)和老板(切入处理类),进行了解耦。当然,在这基础上的更进一步的实现,封装还可以使我们在使用AOP的过程更加的简单,便捷。这也就是后面Spring与AspectJ这些AOP框架所体现的进步性。
?
下一节:待续....
?
此刻窗外看去,杭州正沉溺在细雨濛濛之中...
?
1 楼 icezx 2011-05-27 楼主请用jdk动态代理个没有接口的普通类试试 2 楼 sammor 2011-05-27 icezx 写道楼主请用jdk动态代理个没有接口的普通类试试
这样子是不可以的,
[url]
public Object bind(Object target) {
this.targetPlayer = target;
return Proxy.newProxyInstance(targetPlayer.getClass().getClassLoader(),
targetPlayer.getClass().getInterfaces(), this);
}
[/url]
这里是传进这个普通类的接口进去做代理的,接口是必需的。 3 楼 icezx 2011-05-30 sammor 写道icezx 写道楼主请用jdk动态代理个没有接口的普通类试试
这样子是不可以的,
[url]
public Object bind(Object target) {
this.targetPlayer = target;
return Proxy.newProxyInstance(targetPlayer.getClass().getClassLoader(),
targetPlayer.getClass().getInterfaces(), this);
}
[/url]
这里是传进这个普通类的接口进去做代理的,接口是必需的。
实际开发中接口不是必须的哦,也就jdk是必须的而已。 4 楼 sammor 2011-05-31 icezx 写道
实际开发中接口不是必须的哦,也就jdk是必须的而已。
没能理解你这句话的意思哦,能再解释清楚点吗?
5 楼 zhangbenben 2011-06-02 icezx 写道楼主请用jdk动态代理个没有接口的普通类试试
可以的,用cglib可以实现的。