Spring---浅谈AOP
概念
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的更多相关文章
- 浅谈AOP
AOP,面向切面编程,作为OOP的一种补充,在处理一些系统共有的业务,比如日志,事务等,提供了一种比OOP更佳的解决方案. 在OOP中,控制的粒度为对象,因此,对象中也就参杂这不属于本身业务主体的一下 ...
- 浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~
简介 我们都知道,Spring 框架作为后端主流框架之一,最有特点的三部分就是IOC控制反转.依赖注入.以及AOP切面.当然AOP作为一个Spring 的重要组成模块,当然IOC是不依赖于Spring ...
- 浅谈对Spring Framework的认识
Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...
- 1.1浅谈Spring(一个叫春的框架)
如今各种Spring框架甚嚣尘上,但是终归还是属于spring的东西.所以在这里,个人谈一谈对spring的认识,笔者觉得掌握spring原理以及spring所涉及到的设计模式对我们具有极大的帮助.我 ...
- Spring缓存框架原理浅谈
运维在上线,无聊写博客.最近看了下Spring的缓存框架,这里写一下 1.Spring 缓存框架 原理浅谈 2.Spring 缓存框架 注解使用说明 3.Spring 缓存配置 + Ehcache(默 ...
- 浅谈Spring MVC知识
关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...
- 浅谈Spring中的Quartz配置
浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...
- 浅谈Spring的两种配置容器
浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41 作者:黄小鱼ZZZ ...
- 浅谈使用spring security中的BCryptPasswordEncoder方法对密码进行加密与密码匹配
浅谈使用springsecurity中的BCryptPasswordEncoder方法对密码进行加密(encode)与密码匹配(matches) spring security中的BCryptPass ...
- 浅谈Spring(一)
一.Spring引言 Spring是一款轻量级框架,代码入侵量很小,并且还是众多优秀的设计模式的组合(工厂.代理.模板.策略). 特点: 1.方便解耦,简化开发 通过Spring提供的IoC容器,我们 ...
随机推荐
- 基于android-uitableview扩展-uilistview项目
这个项目是正如标题说的那样,是基于uitableview项目为基础进行二次封装的,目的是实现更多的展现形式,项目地址:点击打开 不过,这个使用起来你还必须得会用uitableview扩展(项目地址:点 ...
- kafka基础一
基本概念: 消息系统的组成由生产者,消费者以及存储系统.消费者从存储系统中读取生产者生产的消息.Kafka作为分布式的消息系统支持多个生产者多个消费者,写消息时允许多个生产者写到同一个Partitio ...
- js 数组对象去重
let hash = {}; let config = [ { name: 2, state: true, output: 'Y'}, { name: 3, state: true, output: ...
- mysql-作业
一.表关系 请创建如下表,并创建相关约束 班级表:class 学生表:student cid caption grade_id sid sn ...
- 七、SSR(服务端渲染)
使用框架的问题 下载Vue.js 执行Vue.js 生成HTML页面(首屏显示,依赖于vue.js的加载) 以前没有前端框架时,用jsp/php在服务器端进行数据的填充,发送给客户端就是已经填充好的数 ...
- ubuntu安装robo3t
直接在官网下载 解压文件(使用命令 tar -zxvf robo3t-1.2.1-linux-x86_64-3e50a65.tar.gz) 打开解压后的文件,进入bin文件,直接在终端运行 ./rob ...
- 12个非常不错的javascript类库
Javascript是一个解释性的编程语言.最初作为浏览器的一部份在浏览器中运行,可以和用户交互,并且控制浏览器,异步通讯,修改显示的document.在这篇文章中,我们收集了12款最新的Javasc ...
- JSP学习 三大指令、九个内置对象、JavaBean、EL表达式
1.page-->最复杂:<%@page language="java" info="xxx"...%> * pageEncoding和con ...
- linux 命令——42 kill (转)
Linux 中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以 使用Ctrl+C键,但是,对于一个后台进程 ...
- 如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量
本文使用的例子源代码在我的github上. 在我的公众号文章在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务介绍了如何通过Cloud Connector ...