概念

AOP是Aspect Oriented Programming的缩写,即面向切面的编程。是一种比较新颖的编程思想,也是Spring框架中一个重要的领域。

AOP将应用系统分为两个部分:核心业务逻辑、横向的通用的逻辑也就是所谓的方面,例如所有大中型应用都要涉及到的持久化的管理、事物管理、安全管理、日志管理以及调试管理等等。在Spring当中提供了面向切面编程的丰富的支持,允许通过分离应用的业务逻辑与系统级的服务。应用对象只实现它们要做的,也就是完成业务逻辑,仅此而已。它们并不负责甚至是意识到其它的系统级别的关注点,例如日志和事物支持等等。

AOP与OOP的关系

AOP(Aspect-Oriented Programming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善,同时AOP也是OOP的延续。是软件开发中的一个热点,也是Spring框架中一个重要的内容。我们可以这样理解,面向对象编程OOP是从静态角度考虑程序结构,即OOP对业务处理过程中的实体以及属性和行为进行了抽象的封装,以获得更加清晰高效果的国际划分,研究是的一种静态的领域。而面向切面的编程,也就是AOP,是从动态角度考虑程序运行过程,即针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或者阶段,研究的是一种动态的领域

AOP的主要功能

主要用于系统级别的功能。例如日志记录、性能统计、安全控制、事物处理、异常处理等等这些主要功能。

AOP的主要意图

主要是将日志记录、性能统计、安全控制、事物处理、异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导性的业务逻辑方法当中,进而改变这些行为的时候,不影响业务逻辑代码的处理,也就是说AOP把一些常用的服务进行模块化,并且用声明的方式,将这些组件使用到其它的业务组件当中去,这样做的结果就是每一个业务组件只需要关心自己的业务逻辑,而不用去了解一些常用的服务组件。AOP正在成为软件开发的下一个光环,使用AOP可以将处理切面的代码注入程序。通常主程序的主要目的并不在于处理这些切面的功能,所以AOP可以有效地防止代码混乱。Spring的framework是很有前途的AOP技术,作为一种非侵略性的,轻型AOP framework,你无须使用预编译器或其它源标签,便可以在Java程序中使用它。这意味着开发团队中只需要一个人来应对AOP的framework,其它人还可以像往常一样进行业务逻辑的编程。

AOP存在的价值

AOP专门用于处理系统中分布于各个模块中的交叉关注点的问题,在Java EE应用中,常常通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP已经成为一种非常常用的解决方案

为什么要用AOP

由于系统会有许多的不同的组件,每一个组件负责一个特定的功能,然而我们需要每一个组件只关心它自身的核心功能。但是在系统中有一些组件,比如日志模块、事物管理模块、安全模块等等组件会比较频繁的融入到其它核心业务组件当中去,这些常用的组件会分散到其它的常用组件当中,这样会带来的麻烦是:如果这些常用的服务组件经常发生变化,那么我们需要在多个组件当中进行修改。这样使得我们的组件代码因为插入了与自身业务无关的组件而变得很混乱

AOP的关键概念

名称 说明
切面(Aspect) 一个关注点的模块化,这个关注点可能会横切多个对象。事物管理是J2EE应用当中一个关于横切关注点很好的例子。在Spring的AOP当中切面可以使用基于模式的,或者说基于Aspect的注解方式来进行实现,通俗一点说,就是我们加入的切面类。比如我们通常所说的日志类
连接点(Join Point) 连接点是在程序执行当中的某个特定的点,比如某方法调用的时候,或者说处理异常的时候。在Spring的AOP过程当中,一个连接点总是表示一个方法的执行,通俗的说就是加入切点的那个点
通知(Advice) 在切面的某个特定的连接点上执行的动作
切入点(Point Cut) 匹配连接点的断言,通知和一个切入点的表达式并连。并在满足这个切入点的连接点上运行。切入点表达式如何和连接点匹配,是AOP的核心
引入(Introduction) 用来给一个类型声明额外的方法和属性。Spring允许引用新的接口到任何被代理的对象
目标对象(Target Object) 被一个或多个切面所通知的对象
AOP代理(AOP Proxy) AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能)。在Spring中AOP代理可以是JDK动态代理
织入(Weaving) 把切面连接到其他的应用程序类型或者对象上,并创建一个被通知的对象。分为:编译时织入、类加载时织入、执行时织入

AOP通俗的理解

一个组件A,不关心其它常用的服务组件B,但是这个组件A使用组件B的时候,不是组件A自身去调用,而是通过配置等其它方式,比如Spring中可以通过XML配置文件。这样就使得A压根就不需要知道服务组件B是怎样的,爱存在不存在,爱怎么存在都与A无关。A只关心自己的业务逻辑,具体A使用B的时候,配置文件去做,与具体的A组件无关

Spring---浅谈AOP的更多相关文章

  1. 浅谈AOP

    AOP,面向切面编程,作为OOP的一种补充,在处理一些系统共有的业务,比如日志,事务等,提供了一种比OOP更佳的解决方案. 在OOP中,控制的粒度为对象,因此,对象中也就参杂这不属于本身业务主体的一下 ...

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

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

  3. 浅谈对Spring Framework的认识

    Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...

  4. 1.1浅谈Spring(一个叫春的框架)

    如今各种Spring框架甚嚣尘上,但是终归还是属于spring的东西.所以在这里,个人谈一谈对spring的认识,笔者觉得掌握spring原理以及spring所涉及到的设计模式对我们具有极大的帮助.我 ...

  5. Spring缓存框架原理浅谈

    运维在上线,无聊写博客.最近看了下Spring的缓存框架,这里写一下 1.Spring 缓存框架 原理浅谈 2.Spring 缓存框架 注解使用说明 3.Spring 缓存配置 + Ehcache(默 ...

  6. 浅谈Spring MVC知识

    关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...

  7. 浅谈Spring中的Quartz配置

    浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...

  8. 浅谈Spring的两种配置容器

    浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41   作者:黄小鱼ZZZ     ...

  9. 浅谈使用spring security中的BCryptPasswordEncoder方法对密码进行加密与密码匹配

    浅谈使用springsecurity中的BCryptPasswordEncoder方法对密码进行加密(encode)与密码匹配(matches) spring security中的BCryptPass ...

  10. 浅谈Spring(一)

    一.Spring引言 Spring是一款轻量级框架,代码入侵量很小,并且还是众多优秀的设计模式的组合(工厂.代理.模板.策略). 特点: 1.方便解耦,简化开发 通过Spring提供的IoC容器,我们 ...

随机推荐

  1. C 碎片八 结构体&枚举&联合

    一.结构体 1, 结构体定义 结构体类型的定义:任意数据类型变量的集合.用于描述一个具体的事物的信息,在C语言中描述一件事物一般都是用结构体 声明结构体类型的格式: struct  结构体名 {成员列 ...

  2. JS中关于clientWidth offsetWidth scrollWidth 等的区别

    网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...

  3. thinkphp简易搜索

    需求: 用户输入关键词,选项卡的每个选项输出一个分类的列表内容,分类有文章.ppt.学习. 实现过程: 视图中用户输入的关键词post给控制器,控制器对这个关键词做三次模糊查询处理,因为是三个分类对应 ...

  4. 几幅手稿讲解CNN

    学习深度神经网络方面的算法已经有一段时间了,对目前比较经典的模型也有了一些了解.这种曾经一度低迷的方法现在已经吸引了很多领域的目光,在几年前仅仅存在于研究者想象中的应用,近几年也相继被深度学习方法实现 ...

  5. Python学习-用户输入和字符串拼接

      用户输入和字符串拼接 #用户输入和字符串拼接username=input("username:")age=int(input("Age:")) #转换整数型 ...

  6. window下安装scala搭载Intellij IDE

    最近由于公司业务需求,要用到scala,编写还是windows下较好,linux下运行比较靠谱,废话少说,直接上步骤! 1.首先安装java环境 jdk下载地址:http://www.oracle.c ...

  7. Visual Studio 2015 终于还是装上了

    win8.1系统 vs2015.preview_ult_CHT.iso 大小4.46G, http://download.microsoft.com/download/9/9/1/99133C05-3 ...

  8. OpenSSL context 的几个参数

    NAME SYNOPSIS DESCRIPTION NOTES BUGS RETURN VALUES EXAMPLES SEE ALSO NAME SSL_CTX_set_verify, SSL_se ...

  9. The 12th Zhejiang Provincial Collegiate Programming Contest - I Earthstone Keeper浙江省赛

    题目:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5501 思路:DFS,用了递归就溢出,所以可能得用非递归的. ...

  10. pta编程题5 Pop Sequence

    第一次提交结果都是YES,后来检查发现Push,Pop函数写的有问题,即Stack sta改为引用Stack &sta,否则不能改变实参的值. #include <iostream> ...