那么OOP(面向对象)相对于AOP有些什么缺点呢?面向对象设计最根本的魅力在于它能够将 真实的世界领域中的实体及各自的行为建模为抽象的对象。以面向对象方式设计的系统产生了很多有效的业务对象,比如Person,Account,Order以及Event.面向对象设计的缺点在于,这样的业务对象会因为混合的属性和与对象最初意图不一致的操作而变的混乱!
我们可以举个例子,假设我们现实中的笔记本电脑,现在有一款IBM T60型号笔记本,那么我们如果要设计这样一个笔记本类,当然就需要有 硬件和软件,但IBM T60型笔记本 蓝块的它提供一个服务 三年质保!那么现在如果以OO的方式,就不大好办,这服务是不是要写到笔记本类中去呢,但假设现在有这样一款水货的T60,它没有这样一个服务,那么难不成它就不属于笔记本这样一个类吗?所以说这样的一个服务并不是笔记本类它必有的!这样就引出了AOP。面向切面的技术!
面向切面性,首先什么是切面,我们小时候应该削过铅笔,我们一刀削下去 不就有一个切面吗,我们学习的几何中也有经常要计算一个切面的面积,就是一个面,其实也就相当于初识Spring讲到的网游,我们的角色本来是只有血这样的属性,但它本身并没有加血这样一种行为,我们设计一扇魔法门,角色经过的时候就会加血!那么我们在设计这个战士的时候只设计一个普通的OO就行了,那么门就是一切面,当角色经过的时候就有了该服务!如果不经过,那么我们的角色依然是完整的!这就是面向切面性!
现在我们再看看JAVA代理:Spring AOP的实现是基于JAVA代理模式的。
代理模式在设计模式中的定义是:为其他对象提供一种代理以控制对这个对象的访问。说白了就是在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。
我们还是来做一个例子,建立一个普通的JAVA PROJECT,

我们选择Create separate source and output folders带一个专门存入源码的src文件夹!然后选中项目添加Spring,

添加核心库及AOP,

我们将 配置文件放在src目录下的fengyan.efly包中!
我们先使用普通的OO模式在fengyan.efly包下创建一个普通的Computer.java类

那么我们现在来改用接口做式式:























































那送鼠标在哪里呢,我们来写一个代理类,让它来 实现,如下:









































获取:IBM电脑一台
送鼠标
通过上面的小例子可以看到,原先的Computer类我们没有破坏,但我们 通过代理来做事可以得到比以前更多的东西了!这也是一种AOP的思想,当然这里面的实现我们并没有通过Spring来实现!
那么这样其实有一个问题,就是我们的代理类Substitute.java需要我们自己去书写,如果能有一种动态的代理类岂不更好,否则我们每写珍上类都需要我们手动去写代理类,我们能不能写一个通用的代理来呢,答案是有,JAVA给我们提供了这样一种机制.
JAVA提供了InvocationHandler接口可以实现动态代理功能!
知道上面知识后,我们将 我们的代理类改改,让其实现该接口,





































































测试代码则如下:



















运行结果如下:
送鼠标
获取:IBM电脑一台