AOP 编程允许你把遍布应用各处的功能分离出来形成可重用的组件,将安全、事务和日志关注点与你的核心业务逻辑相分离。

面向切面编程往往被定义为促使应用程序分离关注点的一项技术。系统由许多不同组件组成,每个组件各负责一块特定功能,除了实现自身核心的功能之外,组件还经常承担着额外的功能。诸如日志、事务管理和安全此类的系统服务经常融入到有自身核心业务逻辑的组件中去,这些服务通常称为横切关注点,因为他们总是跨越系统的多个组建。如果你把这些关注点分散到多个组件中去,你的代码将引入双重复杂性:

1 你的组件会因为那些与自身核心业务无关的代码而变得混乱。 例如 一个向地址簿添加地址条目的方法应该只关注如何添加地址,而不应该关注她是不是安全的或者是否需要支持事务。

2 遍布系统的关注点实现代码将会重复出现在多个组件中。这意味着如果你要改变这些关注点的逻辑,你必须修改各个模块的相关实现。即使你把这些关注点抽象为一个独立的模块,其他模块只是调用它的方法,但方法的调用还是重复出现在各个模块中。

下图展示了这种复杂性,左边的业务对象与系统级服务结合的过于紧密。每个对象不但要知道它需要记日志、进行安全控制和参与事务,还要亲自执行这些服务。

  AOP对这些系统的关注点服务模块化,并以声明的方式将他们应用到它们需要影响的组件中去。结果是这些组件具有高内聚性以及更加关注自身业务,完全不需要了解可能涉及的系统服务的复杂性。总之,AOP确保POJO保持简单。

最新文章

  1. Object类.
  2. mvn使用笔记
  3. 点 击 直 接加我QQ的功能
  4. LinuxMint17.1 Rebecca中安装设置输入法
  5. 浅谈Excel开发:四 Excel 自定义函数
  6. Servlet/JSP-03 HttpServlet
  7. CSS文字排版
  8. 自己编写的sublime text 3 插件
  9. matlab常用小函数(一)
  10. spin.js无图片实现loading进度条,支持但非依赖jquery
  11. jquery cookie 删除不了的处理办法
  12. Http报头Accept与Content-Type的差别
  13. PHP的抽象类、接口类的区别和选择【转载】
  14. 重庆/北京/江苏KS/快乐时时/七星/福运来菠菜电商开奖修复APP网站SSC网站程序开发php
  15. LeetCode算法题-License Key Formatting(Java实现)
  16. 【代码笔记】Web-JavaScript-Javascript对象
  17. C++实现第三方资源释放与载入过程(以DLL为例)
  18. Javascript面向对象编程:非构造函数的继承
  19. spring配置Bean
  20. SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型

热门文章

  1. vs2017 添加引用时 未能完成操作。不支持此接口
  2. 第一个Maven工程的目录结构和文件内容及联网问题
  3. HDU1507 Uncle Tom's Inherited Land*
  4. Codeforces Round #232 (Div. 2) C
  5. 深刻理解Python中的元类(metaclass)--代码实践
  6. Ubuntu 16.04禁用来宾账号(Guest User)
  7. java实现WebService 以及客户端不同的调用方式
  8. da,da_driver
  9. Android: 清除View跳转的历史记录
  10. Workflow:添加工作流存储功能