1.4.1 AOP介绍
AOP经常被定义为一种编程技术,用来在软件系统中提升业务的分离。系统由很多组件组成,每个组件负责一部分功能。然而,这些组件也经常带有一些除了核心功能之外的附带功能。系统服务如日志、事务管理和安全经常被融入到一些其他功能模块中。这些系统服务通常叫做交叉业务,这是因为它们总是分布在应用的很多组件中。通过将这些业务分布在多个组件中,你给你的代码引入了双重复杂性:
实现系统级业务的代码在多个组件中复制。这意味着如果你要改变这些业务逻辑,你就必须到各个模块去修改。就算你把这些业务抽象成一个独立模块,其他模块只是调用它的一个方法,但是这个方法调用也还是分布在很多地方。
你的组件会因为那些与自己核心业务无关的代码而变得杂乱。一个向地址录中添加条目的方法应该只关心如何添加地址,而不是关心它是不是安全或支持事务。
图1.7展示了这种复杂性。左边的业务对象与系统服务结合得太过紧密。不但每个对象都知道它被记日志、受到安全保护并且处于一个事务之中,而且每个对象都负责为自己执行这些服务。
AOP帮助我们将这些服务模块化,并把它们声明式地应用在需要它们的地方。结果是这些组件更加专注于自身业务,完全不知道其他涉及到的系统服务。也就是说,切面确保了POJO保持简单。
如图1.8所示,有助于让我们把每个切面想象成一个覆盖层。在核心层,一个应用包含了实现业务功能的多个模块。使用AOP,你可以使用各种功能层来覆盖核心业务层。这些功能层可以灵活地应用到你的应用中,甚至核心业务都不知道它们的存在。这是一个强大的概念,它将安全、事务和日志功能与应用核心业务分离开。
为了演示在Spring中切面如何被应用,我们重新回到骑士的例子,并添加一个日志切面。
|
| 图1.7 对应用业务(如日志和安全)的调用经常 分散在各个模块中,而这些业务并不是这些模块的主要业务 |
|
| 图1.8 使用AOP,系统级业务覆盖了它影 响到的组件。应用组件关注特定的业务功能 |
| 回书目 上一节 下一节 |
|
||||
| · 浏览器的战国时代 · CCNA认证考试Pass必备 · 无线网络环境 · 无线路由器故障处理 · 解析35岁技术人的价值.. · 无线重中之重:安全问题 · 无线局域网基本知识 · 家庭无线局域网 |
· 华为七千人主动辞职规.. · 微软出价446亿美元收购.. · 虚拟化的“赤壁之战” · 802.11n:下一代的无线.. · 脉冲无线电uwb专题 · AIX操作系统管理应用 · 云计算时代来临 · 求职必杀技 决战面试官 |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · 无线网状网(MESH) · Windows远程桌面应用 · C#技术开发指南 |
· Apache技术专题 · Windows集群服务应用 · C#技术开发指南 · 文档格式标准开战 OOXM.. · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 解析35岁技术人的价值.. |
|||