第五章 面向方面编程___OOP和AOP随想
面向方面编程,又称面向切面编程(Aspect-Oriented-Programming),英文缩写 AOP,可以说是 OOP(Object-Oriented-Programming)面向对象编程的补充和完善。OOP 引入封装,继承,多态性等概念来建立一种对象层次结构,这种对象层次结构通俗的说也就是我们所说的软件。对于 OOP,我记得 Bruce Eckel 有一句名言,“ Everything is Object. ”,中文翻译为 “万物皆对象” 。我们可以将万物定义为一些对象,并将这些对象的行为和属性封装起来,同时定义好对象与对象之间的关系。实质上,在现实开发中,往往有一些角落一直以来被 OOP 忽略或者说未能解决好的,AOP 是 OOP 的一种补充或某种改进,它转换了编程的方式和视角。
在我们以往的开发中,有一些代码往往和核心业务无关,但却大量的分布在所有的对象层次当中。比如:银行业务和事务处理之间,一个是银行的核心业务,一个是非核心业务,他们并从业务的角度上来说,并没有什么真的关联,但是他们却没有彼此分离开来,还有诸如银行业务与日志记录,权限验证,性能检测等等功能,没有与核心业务分离开来。
如图,核心 业务模块A 中与 核心业务模块B 之中都包含了与他们的核心业务无关的逻辑,最终造成的高耦合状态。

通过上图我们可以知道,当在软件开发中我们要为这些分散的对象引入公共的行为时,OOP 则显得无力。OOP 定义了从上到下的关系,但是并不适合定义从左到右的关系。这时,当 OOP 正在为定义这些左右关系而烦劳的时候,AOP (面向方面编程) 出现了。

通过 AOP(面向方面的编程),可以将程序的责任分开,对象与方面互不干扰。面向方面的模块并非显式地为对象所调用,而是通过或注入或截取的方式,去获得被封装的对象内部方法间的消息,然后做出相应地处理。也许面向方面的模式破坏了对象的封装,却正其如此,方才能降低模块与模块之间的耦合度。同样地,通过对“方面”的封装,将这些通用的功能从不同的类中分离出来,使不同的模块都能共享同样的“方面”,这也极大地减少了重复代码。通过上面的图可以看出,通过 AOP 的方式,将业务逻辑和横切逻辑从业务模块中分离出来,极大的降低了系统的耦合。
如果说 “对象” 是一根竹竿,竹竿其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这一根竹竿切成很多截,以获得其内部的消息。而切开的竹截,也就是所谓的 “方面” 了。然后它又巧妙的将这些切开的切面复原,不留痕迹。
本系列导航帖 : http://www.cnblogs.com/cilence/archive/2013/02/21/2920455.html
由于个人水平有限,以上字符仅代表个人观点。
第五章 面向方面编程___OOP和AOP随想的更多相关文章
- 第五章 面向方面编程___AOP入门
上一篇讲了 AOP 和 OOP 的区别,这一次我们开始入门 AOP .实现面向方面编程的技术,主要分为两大类: 一是 采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行: ...
- Spring详解(五)------面向切面编程
.AOP 什么? AOP(Aspect Oriented Programming),通常称为面向切面编程.它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的 ...
- Spring企业级程序设计 • 【第3章 面向切面编程】
全部章节 >>>> 本章目录 3.1 AOP基本概念和术语 3.1.1 AOP概念 3.1.2 AOP的术语解释 3.1.3 通知类型介绍 3.1.4 通过AOP模拟事务操 ...
- Spring-05 -AOP [面向切面编程] -Schema-based 实现aop的步骤
一.AOP [知识点详解] AOP:中文名称面向切面编程 英文名称:(Aspect Oriented Programming) 正常程序执行流程都是纵向执行流程 3.1 又叫面向切面编程,在原有纵向执 ...
- 面向切面编程(Spring AOP)
一.什么是AOP AOP即面向切面编程,通过预编译方式和运行期动态代理实现程序功能的同一维护的一种技术.主要体现在日志记录.性能统计.安全控制.事务处理和异常处理等. 1.相关概念 二.切面.切入点配 ...
- Spring 08: AOP面向切面编程 + 手写AOP框架
核心解读 AOP:Aspect Oriented Programming,面向切面编程 核心1:将公共的,通用的,重复的代码单独开发,在需要时反织回去 核心2:面向接口编程,即设置接口类型的变量,传入 ...
- JAVA Spring 面向切面编程 基本案例(AOP)
< 1 > 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...
- Spring AOP——Spring 中面向切面编程
前面两篇文章记录了 Spring IOC 的相关知识,本文记录 Spring 中的另一特性 AOP 相关知识. 部分参考资料: <Spring实战(第4版)> <轻量级 JavaEE ...
- Spring(三)面向切面编程(AOP)
在直系学长曾经的指导下,参考了直系学长的博客(https://www.cnblogs.com/WellHold/p/6655769.html)学习Spring的另一个核心概念--面向切片编程,即AOP ...
随机推荐
- Linux 监控分析
一.硬件基础 Cpu 逻辑的处理.计算.判断 现代分时多任务操作系统对 CPU 都是分时间片使用的:比如A进程占用10ms,然后B进程占用30ms,然后空闲60ms, 再又是A进程占10ms,B进 ...
- ny737 石子合并(一) 总结合并石子问题
描述: 在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序地合并成一堆. 规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分. 试设计一个算法,计算出将n堆石子合并 ...
- 关于Parse字符串为时间一次被坑经历
在Java代码中发现一个bug,就是本来更新为时间的内容更新为一些奇怪的内容,比如20819这种形式,本来更新的时间都是近期不会超过一年, 为什么会出现这种情况,非常奇怪,遂调试下代码,跟踪发现要匹配 ...
- eclipse 安装插件的几种方式
eclipse 安装插件的几种方式 1.使用url在线安装 ,最方便最快捷 help - install new software 接下来就是同意协议之类的,next ne ...
- 利用jdbc连接池(利用jdni)
简介 前段时间用jdbc连接池,在这里记录下 1.利用jdni配置数据源 在Web项目的META-INF文件夹中新建context.xml文件,内容为: <?xml version=" ...
- FluentData - 轻量级.NET ORM持久化技术解决方式
FluentData - 轻量级.NET ORM持久化技术解决方式 文件夹: 一.什么是ORM? 二.使用ORM的优势 三.使用ORM的缺点 四.NET下的ORM框架有哪些? 五.几 ...
- mysql 授权的时候库名不能添加单引号homestead.* 写成 '库名'.* 错的语法
create user 'wechat'@'192.168.10.%' identified by 'xxxxx'; create database 库名DEFAULT CHARSET utf8 CO ...
- 高性能高并发网络库:StateThreads
StateThreads是一个C的网络程序开发库,提供了编写高性能.高并发.高可读性的网络程序的开发库,轻量级网络应用框架 共也就3000行C代码 网络程序(Internet Application) ...
- [oracle] 如何使用myBatis在数据库中插入数据并返回主键
在MyBatis中,希望在Oracle中插入数据的同时返回主键值,而非插入的条数. ① oracle使用 selectKey. U_USER_INFO_SEQ 是在数据库中定义好的这张表关联的序列se ...
- C++之程序时间统计类实现
/********** TimeCounter.h huangsy13@gmail.com **********/ #ifndef TIMECOUNTER #define TIMECOUNTER #i ...