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容器,我们 ...
随机推荐
- Docker的安全问题以及一些预防方案
http://blog.csdn.net/Ruidu_Doer/article/details/53401523
- spring运用的设计模式
1.代理模式(典型的aop) 2.工厂模式(beanFactory) 3.观察者模式(ApplicationContextEvent && ApplicationContextList ...
- git 使用流程 命令
克隆远程分支到本地 git clone <https://github.com/cqzyl/methods.js.git> 进入master分支 git checkout master 以 ...
- 【Mood-13】Android --如何从初级工程师进化为高级工程师
一 明确自我定位 现在你是初级工程师,但是你想当个高级工程师,所 以,你就要给自己定个目标,即:我是要成为高级工程师的男人.有了这个定位,并且努力朝着这个目标去努力,然后内心深处就会有一个感觉,这个 ...
- 入口类和@SpringBootApplication
SpringBoot通常有一个名为*Application的入口类,入口类里有一个标准的Java应用的入口方法,main方法,在该方法中使用SpringApplication.run(xxxxxApp ...
- C#之linq
本文根据30分钟LINQ教程学习作的笔记. 1.Guid.Empty Guid 结构: 表示全局唯一标识符 (GUID).Empty字段:Guid 结构的只读实例,其值均为零.用来设置初始值. G ...
- Nginx+Keepalived双主轮询负载均衡
双主模式使用两个VIP,前段有2台服务器,互为主从,两台服务器同时工作,不存在资源浪费情况.同时在前端的DNS服务器对网站做多条A记录,实现了Nginx的负载均衡,当一台服务器故障时候,资源会转移到另 ...
- pat乙级1052
输出“\”字符: cout << "\\"; 因为‘\’是转义字符,例如“\n”代表换行. 同理,printf输出“%”: printf("%%") ...
- linux 命令——36 diff(转)
diff命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的输 ...
- SAP云平台运行环境Cloud Foundry和Neo的区别
SAP云平台提供了两套运行环境:Cloud Foundry和Neo 从下图能发现,Cloud Foundry的运行环境,基础设施由第三方公司提供,比如Amazon亚马逊和Microsoft微软,SAP ...