谈谈对AOP的认识三——优化AOP,进一步解耦
来源:互联网 发布:rsa算法c语言实现 编辑:程序博客网 时间:2024/06/06 09:25
有了前两篇博客的铺垫,我们对AOP已经不陌生了。那么,AOP,你了解了有多少呢?
都知道AOP(Aspect-Oriented Programming,面向方面编程)是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为 “Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为; 那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手 将这些剖开的切面复原,不留痕迹。
总的来说AOP 就是横向切割,解耦的一种设计模式。上篇博客,有一个简单的DEMO,那时我们一般使用AOP的方法。但是我们的解耦不仅仅是那样,这篇博客,我们进一步剖析一下AOP,看能不能让解耦再进一步。首先我们看一张图:
这是一张概念图,是对上篇博客的一种宏观描述,这种方式的最大的特点:服务(日志,事务)与代理类是一体的。这就是我们经常使用的方式,如果你不是太明白,那么我们来看看类图:
图中可以明显看到代理类:GreetingProxy 中包含了两个服务,一个是before,一个是After。这两个服务被写在了代理类中。那好问题来了,现在我要再增加一个服务:around,是不是还需要编写GreetingProxy这个代理类。也就是说,使用这种方式,服务和业务,我们只做到了单方面的解脱,业务的解脱,当然这已经是一个很大的进步了。现在我们需求提高了,我们想要让“服务”也解脱,怎么办?
于是我们有了这种图?
都知道AOP(Aspect-Oriented Programming,面向方面编程)是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为 “Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为; 那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手 将这些剖开的切面复原,不留痕迹。
总的来说AOP 就是横向切割,解耦的一种设计模式。上篇博客,有一个简单的DEMO,那时我们一般使用AOP的方法。但是我们的解耦不仅仅是那样,这篇博客,我们进一步剖析一下AOP,看能不能让解耦再进一步。首先我们看一张图:
这是一张概念图,是对上篇博客的一种宏观描述,这种方式的最大的特点:服务(日志,事务)与代理类是一体的。这就是我们经常使用的方式,如果你不是太明白,那么我们来看看类图:
图中可以明显看到代理类:GreetingProxy 中包含了两个服务,一个是before,一个是After。这两个服务被写在了代理类中。那好问题来了,现在我要再增加一个服务:around,是不是还需要编写GreetingProxy这个代理类。也就是说,使用这种方式,服务和业务,我们只做到了单方面的解脱,业务的解脱,当然这已经是一个很大的进步了。现在我们需求提高了,我们想要让“服务”也解脱,怎么办?
于是我们有了这种图?
[服务摆脱代理类]
这样的话,是不是“服务”也自由了呢?你有和感想呢?
接下来的几篇博客,我们将继续说AOP的优化。
0 0
- 谈谈对AOP的认识三——优化AOP,进一步解耦
- 谈谈对AOP的认识三——优化AOP,进一步解耦
- 谈谈对AOP的理解 一——认识AOP
- 谈谈对AOP的认识二——AOP概念术语理解
- 谈谈对Spring AOP的认识
- 对AOP的认识
- Spring AOP的实现——对AOP的理解
- Spring中的AOP(一)——AOP基本概念和Spring对AOP的支持
- Spring中的AOP(一)——AOP基本概念和Spring对AOP的支持
- AOP的简单认识
- Spring--- AOP的认识
- 对JCreator的进一步认识
- 对git的进一步认识
- Spring(三)——AOP
- Spring(三)——AOP
- 关于AOP的一些认识
- 对AOP的理解
- 对AOP池(AOP容器)的研究
- 架构师知识体系(3)--系统架构管理实践
- Python学习笔记 - 列表生成式listComprehensions
- linux0.12之内存管理(1)-整体框架思路
- 使用Jsoup 抓取页面的数据
- HDOJ 2005 第几天?(水)
- 谈谈对AOP的认识三——优化AOP,进一步解耦
- J2EE之EJB
- CString/string 区别及其转化
- J2SE总结
- WordPress主题 最新大前端DUX1.2主题官方版 取消加密 完美使用 首次分享
- 黑马day10 批处理Statement&PrepareStatement处理方式对比
- 支持向量机(SVM)、支持向量回归(SVR)
- Android通过用代码画虚线椭圆边框背景来学习一下shape的用法
- Java static属性和静态代码块和构造方法等的执行顺序探讨