Spring中AOP的理解
1.AOP的概念
AOP(AspectOriented Programming,面向切面编程)指的是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下个程序动态统一添加功能的一种技术。AOP提供从一个角度来考虑程序结构以完善面向对象编程。它为开发人员提供了一种描述横切关注点的机制,并能够自动将横向关注点入到面向对象的软件系统中,从而实现了横切关注点模块化
AOP一般用于实现那些与业务无关,但是业务模块所共同调用的逻辑,例如异常拦截、事务管理、日志管理和权限控制等,AOP将这些代码封装起来,有利于减少系统的重复代码,降低模块间耦合度,提供可维护性。
AOP的基本概念:Aspect(切面):一个关注点的模块化,这个关注点可能会横切多个对象;Joinpoint(连接点):程序执行过程中某个特定的点,比如处理异常的时候;Advice(通知):在切面的某个特定连接点上执行的操作;Pointcut(切入点):匹配连接点的断言;Introduction(引入):用来给一个类型声明额外的方法和属性;Target Object(目标对象):被一个或多个切面所统治的对象;Weaving(织入):被切面连接到其他应用程序类型或对象上,并创建被通知的对象。
2.AOP的实现原理
AOP的核心实现与IoC一样依赖于Java的反射机制,但是与IoC不同的地方是,IoC用到的相关设计模式是工程模式,而AOP用到的是代理模式。代理模式的思想是不让外部直接访问具体目标,而是需要通过一个代理类才能访问,所有与具体目标的通信都能通过这道“隔离层”来传送请求或返回状态。
3.AOP的通知类型
/* 1、Before advice(前置通知):在方法执行之前执行,在一个切面里使用@Before 注解声明通知。配置参考示例如下: */ <bean id="afterReturningAdviceExample" class="完整类名" /> <aop:config proxy-target-class="false"> <!-- 定义切入点 --> <aop:pointcut type="aspectj" id="beforePointcut" exception="execution(*com.itjob.spring.aop..*Manager.*(..))"/> <!-- 定义切面 --> <aop:aspect ref="beforeAdviceExample"> <aop:before pointcut-ref="beforePointcut" method="beforeAspect" /> </aop:aspect> </aop:config> /* execution(*com.itjob.spring.aop..*Manager.(..))表示切入点为com.itjob.spring.aop 包及其子包中以Manager结尾的类的任意方法钱作为切入点 */ /* 2、After returning advice(返回后通知):通常在已匹配的方法返回的时候执行, 也可使用@AfterReturning注释来声明。配置如下 */ <bean id="afterReturningAdviceExample" class="完整类名" /> <aop:config proxy-target-class="false"> <!-- 定义切入点 --> <aop:pointcut type="aspectj" id="afterReturningPointcut" exception="execution(*com.itjob.spring.aop..*Manager.*(..))"/> <!-- 定义切面 --> <aop:aspect ref="afterReturningAdviceExample"> <aop:after-returning pointcut-ref="afterReturningPointcut" method="afterReturningAspect" returning="returnValue"/> </aop:aspect> </aop:config> /* 3、After throwing advice(抛出后通知):在一个方法抛出异常后执行。采用声明 方式定义切入点时,可使用@AfterThrowing注释来声明,配置入下 */ <bean id="afterThrowingAdviceExample" class="完整类名" /> <aop:config proxy-target-class="false"> <!-- 定义切入点 --> <aop:pointcut type="aspectj" id="afterThrowingPointcut" exception="execution(*com.itjob.spring.aop..*Manager.*(..))"/> <!-- 定义切面 --> <aop:aspect ref="afterThrowingAdviceExample"> <aop:after-throwing pointcut-ref="afterThrowingPointcut" method="afterThrowingAspect" throwing="ex"/> </aop:aspect> </aop:config> /* 4、After (finally)advice(后通知):不论一个方法是如何结束的,在它结束后 通知都会运行。若使用声明式,可使用@After注释来声明。这个通知必须处理 正常返回和异常返回两种情况,通常来释放资源,配置如下: */ <bean id="afterAdviceExample" class="完整类名" /> <aop:config proxy-target-class="false"> <!-- 定义切入点 --> <aop:pointcut type="aspectj" id="afterPointcut" exception="execution(*com.itjob.spring.aop..*Manager.*(..))"/> <!-- 定义切面 --> <aop:aspect ref="afterAdviceExample"> <aop:after pointcut-ref="afterPointcut" method="afterAspect" throwing="ex"/> </aop:aspect> </aop:config> /* 5、Around Advice(环绕通知):在一个方法执行之前和之后执行,并且它可以决定 这个方法在什么时候执行、如何执行、甚至是是否执行。声明式的环绕通知可用 @Around注释来声明。 */ <bean id="aroundAdviceExample" class="完整类名" /> <aop:config proxy-target-class="false"> <!-- 定义切入点 --> <aop:pointcut type="aspectj" id="aroundPointcut" exception="execution(*com.itjob.spring.aop..*Manager.*(..))"/> <!-- 定义切面 --> <aop:aspect ref="aroundAdviceExample"> <aop:after pointcut-ref="aroundPointcut" method="aroundAspect" /> </aop:aspect> </aop:config> |
4.AOP适用场景
1)系统权限管理;2)错误处理和异常拦截;3)事务管理;4)持久化;5)同步问题;6)系统调试;7)性能优化;8)日志
Spring中AOP的理解的更多相关文章
- 关于Spring中AOP的理解
AOP简介[理解][重点] 1.AOP(Aspect Oriented Programing)面向切面/方面编程 2.AOP隶属软件工程的范畴,指导开发人员如何制作开发软件,进行结构设计 3.AOP联 ...
- Spring 中aop切面注解实现
spring中aop的注解实现方式简单实例 上篇中我们讲到spring的xml实现,这里我们讲讲使用注解如何实现aop呢.前面已经讲过aop的简单理解了,这里就不在赘述了. 注解方式实现aop我们 ...
- JAVA高级架构师基础功:Spring中AOP的两种代理方式:动态代理和CGLIB详解
在spring框架中使用了两种代理方式: 1.JDK自带的动态代理. 2.Spring框架自己提供的CGLIB的方式. 这两种也是Spring框架核心AOP的基础. 在详细讲解上述提到的动态代理和CG ...
- 浅析Spring中AOP的实现原理——动态代理
一.前言 最近在复习Spring的相关内容,刚刚大致研究了一下Spring中,AOP的实现原理.这篇博客就来简单地聊一聊Spring的AOP是如何实现的,并通过一个简单的测试用例来验证一下.废话不 ...
- Spring中AOP相关的API及源码解析
Spring中AOP相关的API及源码解析 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring ...
- Spring中IOC的理解
Spring中IOC的理解 1.什么是IOC? (1)控制反转.把对象创建和对象间的调用过程交给Spring进行管理. (2)使用IOC的目的:为了耦合度降低. 2.IOC底层原理? (1)xml解析 ...
- Spring中AOP原理,源码学习笔记
一.AOP(面向切面编程):通过预编译和运行期动态代理的方式在不改变代码的情况下给程序动态的添加一些功能.利用AOP可以对应用程序的各个部分进行隔离,在Spring中AOP主要用来分离业务逻辑和系统级 ...
- Spring中AOP简介与切面编程的使用
Spring中AOP简介与使用 什么是AOP? Aspect Oriented Programming(AOP),多译作 "面向切面编程",也就是说,对一段程序,从侧面插入,进行操 ...
- 框架源码系列十:Spring AOP(AOP的核心概念回顾、Spring中AOP的用法、Spring AOP 源码学习)
一.AOP的核心概念回顾 https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/core.html#a ...
随机推荐
- Java流(一)
流: 概念:Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存中,形成了流,然后将这些流还可 以写到另外的目的地(文 ...
- 洛谷——P1629 邮递员送信
P1629 邮递员送信 题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要 ...
- win10安装mysql8.0.15
1:下载mysql8.0.15 https://www.mysql.com/downloads/ 2:下载完解压,增加my.ini配置文件 [mysqld] # 设置3306端口 port= # 设置 ...
- Sqli-labs less 1
Less-1 我们可以在http://127.0.0.1/sqllib/Less-5/?id=1后面直接添加一个 ' ,来看一下效果: 从上述错误当中,我们可以看到提交到sql中的1'在经过sql语句 ...
- xUtils 中的 BitmapUtils
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha xUtils框架,包括BitmapUtils.DbUtils.ViewUtils和Htt ...
- BZOJ 1131 [POI2008]Sta(树形DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1131 [题目大意] 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度 ...
- 【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem A. The Catcher in the Rye
一个区域,垂直分成三块,每块有一个速度限制,问你从左下角跑到右上角的最短时间. 将区域看作三块折射率不同的介质,可以证明,按照光路跑时间最短. 于是可以二分第一个入射角,此时可以推出射到最右侧边界上的 ...
- Jedis笔记
Sting: Jedis jedis=RedisClient.getResource(); jedis.set("hello", "world"); Syste ...
- Problem D: 程序填充(递归函数):数列2项和
Problem D: 程序填充(递归函数):数列2项和 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2601 Solved: 2117 Descrip ...
- 详解React的生命周期
React生命周期 之前自己在学习React的时候,只是简单的理解了生命周期有这么一些,但是不知道大概的一个流程是怎么样的.那天在面试的时候,问到了.自己也有点懵,也没提前看,不过还是答上来了一些,这 ...