本文讲述sprint的第二个基本概念: AOP,即面向方面编程

什么是面向方面编程

软件项目中,日志系统等服务系统被核心功能系统调用,日志系统的代码分散在各处。面向方面编程将日志等服务系统独立出来,作为单独一个模块,形成一个“方面”。然后通过一些手段将日志与核心代码再联系起来,叫做“织入”。由此将原来混杂在一起的代码分离成单独的模块,代码质量提高,模块内聚性更高,核心模块专注于处理核心业务流程,而不需要关注不相关的东西,如记录日志、考虑安全等因素。

通过面向方面编程,模块可以更加独立。只要不是本模块需要做的事情,都可以抽取成为一个“方面”,形成一个新的类。

几个核心概念:

  1. 通知: 定义“什么”及“何时”。 “什么”表示这个通知要做什么事情(可以理解成一个函数),“何时”表示这个通知在什么时候被触发。根据“何时”,可将通知分为5种:前置通知、后置通知、返回通知、异常通知、环绕通知。
  2. 切点: 定义“何处”,表示通知在什么地方被调用。在spring中,都是在函数被调用时调用,因此切点具体定义在哪个包的哪个函数,返回值是何类型、输入参数旭什么类型的函数。
  3. 切面(或方面): 切面是通知和切点的集合

以上例子中,日志系统就是一个切面,切面中的某个函数是通知,并且可以通过配置指定在“何时”,并且将核心系统中的哪个类的哪个方法作为切点,这个通知被触发。

Sprint只支持在普通函数被调用时的AOP,不支持成员变量被修改时、或构造函数被调用时的AOP。因为Spring实现AOP的方式是通过动态的为核心系统类生成一个代理对象来实现的。但这可覆盖大多数的需求。

怎样使用

待补充。

什么时候使用

在设计一个类时,考虑某个功能时,问一个问题:这个功能是不是必须要我来做,或者由我来做是否合理。如果不是,则都可以将这个功能抽取出来作为一个切面。

当需要为一个类增加功能时。

当要修改一个类的功能时。

好处

  • 更加精细的类划分,类更容易重用
  • 模块更加内聚,只关心自己确实需要做的事务,不相关的事务都可以提取为一个切面独立出来
  • 可以在不修改类定义的情况下,给类增加功能、修改功能

Spring使用 --- 基本概念(二):AOP,面向方面编程的更多相关文章

  1. Spring学习手札(二)面向切面编程AOP

    AOP理解 Aspect Oriented Program面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 但是,这种说法有些片面,因为在软件工程中,AOP的价值体现的并 ...

  2. Spring详解篇之 AOP面向切面编程

    一.概述 Aop(aspect oriented programming面向切面编程),是spring框架的另一个特征.AOP包括切面.连接点.通知(advice).切入点(pointCut) . 1 ...

  3. Spring框架(四)AOP面向切面编程

    一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...

  4. Spring Boot笔记九:AOP面向切面编程

    我参考的这篇文章,以验证身份为例讲解了什么是AOP AOP 这里只讲解一下怎么去实现AOP 新建一个类,叫HttpAspect用来切面 package com.vae.springboot.study ...

  5. 详细解读 Spring AOP 面向切面编程(二)

    本文是<详细解读 Spring AOP 面向切面编程(一)>的续集. 在上篇中,我们从写死代码,到使用代理:从编程式 Spring AOP 到声明式 Spring AOP.一切都朝着简单实 ...

  6. Spring:AOP面向切面编程

    AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. AOP是软件开发思想阶段性的产物,我们比较熟悉面向过程O ...

  7. Spring Boot2(六):使用Spring Boot整合AOP面向切面编程

    一.前言 众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转.本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理. 二.何为aop ​ aop全称Aspec ...

  8. 浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~

    简介 我们都知道,Spring 框架作为后端主流框架之一,最有特点的三部分就是IOC控制反转.依赖注入.以及AOP切面.当然AOP作为一个Spring 的重要组成模块,当然IOC是不依赖于Spring ...

  9. Spring 08: AOP面向切面编程 + 手写AOP框架

    核心解读 AOP:Aspect Oriented Programming,面向切面编程 核心1:将公共的,通用的,重复的代码单独开发,在需要时反织回去 核心2:面向接口编程,即设置接口类型的变量,传入 ...

  10. 【原创】Android AOP面向切面编程AspectJ

    一.背景: 在项目开发中,对 App 客户端重构后,发现用于统计用户行为的友盟统计代码和用户行为日志记录代码分散在各业务模块中,比如在视频模块,要想实现对用户对监控点的实时预览和远程回放行为进行统计, ...

随机推荐

  1. thinkpad x260在ubuntu 14.04lts wifi驱动安装 ( ubuntu iwlwifi驱动 都可行 )

    实验室要新购笔记本x260,用于ROS调试,装上ubuntu-ros后,发现wifi不支持. 查阅大量资料,如下: http://www.ubuntu.com/certification/hardwa ...

  2. HTML DOCTYPE 的重要性

    定义和用法 <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前. <!DOCTYPE> 声明不是 HTML 标签:它是指示 we ...

  3. H5学习之旅-xhtml语法(15)

    xhtml定义了一套语法的语法规范 简要介绍一下 1.必须正确的嵌套 2.标签必须结束 3.元素必须小写 4.文档必须有一个根元素 html属性规范 1.html属性必须小写 2.html属性值必须双 ...

  4. 【算法导论】单源最短路径之Bellman-Ford算法

    单源最短路径指的是从一个顶点到其它顶点的具有最小权值的路径.我们之前提到的广度优先搜索算法就是一种无权图上执行的最短路径算法,即在所有的边都具有单位权值的图的一种算法.单源最短路径算法可以解决图中任意 ...

  5. 开源电子商务平台:OfBiz

    OFBiz是一个电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级.跨平台.跨数据库.跨应用服务器的多层.分布式电子商务类WEB应用系统的框架. ...

  6. 关于Yuri Boykov and Vladimir Kolmogorov 于2004年提出的max flow / min cut的算法的详解

    出处:http://blog.csdn.net/euler1983/article/details/5959622 算法优化algorithmgraphtree任务 这篇文章说的是Yuri Boyko ...

  7. HOW to Use QP_PREQ_PUB.PRICE_REQUEST API to Price an Item

    In this Document Goal   Solution   References APPLIES TO: Oracle Advanced Pricing - Version 11.5.10 ...

  8. 芯片SIAT-002测试PCB板设计

    这个板子,从原理图到PCB板,总共画了6天,接近一个星期!虽然说各种麻烦,但总算学到了一些新知识.谨记以备后查. 附注: 模拟地与数字地详解 单片机晶振电路 1. 走线规划 针对采用BGA封装及引脚数 ...

  9. 苹果新的编程语言 Swift 语言进阶(十三)--类型检查与类型嵌套

    一 类型检查 1. 类型检查操作符 类型检查用来检查或转换一个实例的类型到另外的类型的一种方式. 在Swift中,类型检查使用is和as操作符来实现. is操作符用来检查一个实例是否是某种特定类型,如 ...

  10. cocoa编程第4版 8.6 挑战2 解答

    该版本的RaiseMan不用Array Controller,全部手写代码. 要注意的有以下几点: 1.TableView每列的sort设置和AC版的相同,但要手写排序代理方法 2.TableView ...