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容器,我们 ...
随机推荐
- oop典型应用:实体类
1. 要知道这个图三者的关系 2.实体类属性类型与数据库类型 3.readonly与const的对比 两者的区别如下: ①const能修饰类中的字段(field)或者局部变量(local variab ...
- oracle报错:ORA-01658(转自52斋347)
在oracle里创建表,报出错:ORA-01658: 无法为表空间space中的段创建 INITIAL 区:或者: ORA-01658: unable to create INITIAL extent ...
- 数学建模大赛-NO.1
数学建模大赛-NO.1 论文精析 近期,在网上各种的收罗,张开了各式各样的捕抓.哈哈… .终于,在一个不经意之间发现了一个巨大无比的宝藏式的网站,此网站网址为:http://cjsxjm.gzsi ...
- WPF学习二:TextBlock和Label的区别
TextBlock和Label都是用来显示少量数据的.好多文章对Label存在的描述都是它允许使用"快速获取"."快速获取"就是允许你用Alt加上其它的按键快速 ...
- OutOfMemoryError异常 和 StackOverflowError异常
OutOfMemoryError异常 StackOverflowError异常 程序计数器 无 无 Java虚拟机栈 如果虚拟机栈可扩展,扩展时无法申请到足够内存 线程请求的栈深度大于虚拟机所 ...
- noip模拟赛#39
昨晚打开的题想了一会发现都不会后决定慢慢想.然后早上开校会的时候莫名其妙的都想出来了... T1:m=100,ai=50000,i<=5.1到m的数每个数只能用一次,判断是否能够有这些数的某些数 ...
- iOS将大文件映射到内存(读取大文件)
http://blog.csdn.net/xyt243135803/article/details/40995759 在<中国区GPS偏移纠正(适用于Google地图)>一文中曾读取一个7 ...
- python_63_装饰器6
#decorator意思:1.装饰器 2.语法糖 import time user,passwd='qi','123' def auth(func): def wrappper(*args, **kw ...
- 后台调用前台js
WEB后台代码调用前台JS(两种方式). 1 这种方式只能调用简单的JS代码.不能调用自定义的函数. string jss = "<script language='javascr ...
- .NET利用RFC连接SAP,查询、读取SAP数据
为黄朴整理!!!!!!!!!!!!!!!!! 在NuGet 添加 sapnco 一个简单的SAPCommand,方法 GetDataTableFromRFCTable 复制于 https://www. ...