面向切面

DI能够让相互协作的软件组件保持松耦合,而面向切面编程(aspect-oriented-programming,AOP)允许你把遍布应用各处的功能分离出来形成可重用的组件

1.为什么要使用AOP

1.1 横切关注点

系统由许多不同的组件组成,每一个组件各负责一块特定的功能,除了实现自身核心的功能之外,这些组件还经常承担额外的职责。诸如日志,事物管理和安全这样的系统服务经常融入到自身具有核心业务逻辑的组件中去,这些系统服务通常称为横切关注点,因为他们会跨越多个组件

1.2 横切关注点分散到各个组件中,带来的双重复杂性

  1. 如果你要改变这些关注点逻辑,必须修改各个模块相关实现,即使你把这些关注点抽象到独立模块,其他模块只是调用他的方法,但方法的调用还是会重复的出现在各个模块中

  2. 组件会因为那些会自身核心业务无关的代码而变得混乱

1.3 AOP能带来什么?

1.3.1基于切面和惯例进行申明式编程

AOP能够使这些服务模块化,并以申明的方式将他们应用到他们需要影响的应用组件中

优势:

  • 组件具有更高的内聚性
  • 更加关注自身的业务
  • 不需要了解涉及系统服务带来的复杂性
  • 确保POJO的简单性
1.3.2 使用模板消除样板式代码

有些代码总感觉以前曾经这么写过,这是因为他是样板式代码。通常为了实现通用和简单的任务,你不得不一遍遍重复编写这样的代码

造成的原因

  • 很多事因为使用Java API导致的样板代码:

    • 如JDBC查询数据库:(Spring 解决方案JdbcTemplate)

      因为少量查询员工代码淹没在一堆JDBC代码中

      • 首先要创建数据库连接

      • 创建一个语句对象

      • 最后才能查询

      • 还要捕获异常

      • 关闭数据库连接,语句、结果集

results matching ""

    No results matching ""