Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探
由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现。
本文一下未贴出的相关代码示例请关注小编的上篇博文《Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较》,在此不再赘述。
基于AspectJ注解配置的AOP编程,就是将所有配置信息都放在源代码中以注解的方式标注。以与“基于XML配置”的AOP编程相区别。
1)Spring AOP注解就是依赖AspectJ来实现。因此使用Spring AOP注解,必须引入Aspectj框架及相应的包(aspectjrt.jar和aspectjweaver.jar)。
关于包的下载与引入,请参考小编的另外一篇博文《Spring学习之旅(五)极速创建Spring AOP java工程项目》
所以“基于AspectJ注解配置的AOP编程”实际上是:Spring AOP+AspectJ框架进行切面编程。
2)创建Spring配置文件,并在配置文件中引入aop命名空间和context命名空间,并配置“AspectJ的注解支持”,以及自动扫描的包的支持。
3)基于AspectJ注解声明切面
即在设计切面类时,在java源代码中采用注解标注“切面的相关信息”。
讲一个java类声明为一个切面:
首先,要注解成一个Bean,必须是IoC的Bean,可以是用@Component注解定义Bean。
其次,注解声明为一个切面,使用@Aspect注解,同时在类的方法注解中给出与该切面相关的“通知”和“切入点”
然后,我们还可以指定切面的优先级,使用@Order(级别号)。级别号为大于等于0的整数,值越小,优先级越高。
4)基于AspectJ注解声明通知
标注在切面类的方法上,AspectJ支持5种类型的通知注解:
@Before、@After、@AfterRunning、@AfterThrowing、@Around
举一个例子:
- //注解为前置通知,并注解其切入点表达式
- @Before("execution(* com.edu.aop.ArithmeticCalculator.*(..))")
- public void validationArgs(JoinPoint joinPoint){
- //具体方法实现
- }
在上篇博文中的实例中,给出了通知内切入点表达式的两种写法:一种具体确定的;一种泛化的。
当通知括号内除了切入点表达式属性外,还有其他属性时,应写明属性对应的属性值。
比如:
- @AfterRunning(pointcut="execution(* com.edu.aop.*.*(..))",returning="abc")
- public void afterMethod(JoinPoint joinPoint,Object abc){
- //具体方法实现
- }
- @AfterThrowing(pointcut="execution(* com.edu.aop.*.*(..))",throwing="e")
- public void afterMethod(JoinPoint joinPoint,ArithmeticException e){
- //具体方法实现
- }
Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探的更多相关文章
- Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较
本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...
- spring-AOP框架(基于AspectJ注解配置AOP)
基于AspectJ注解配置AOP 1.加入jar包: 要在Spring应用中使用AspectJ注解,必须在classpath下包含AspectJ类库:aopalliance.jar.aspectj.w ...
- 基于@AspectJ注解配置切面与基于XML配置切面
1. Waiter目标类 package com.smart.aop.advice.pointcut; public class Waiter { public void greetTo(String ...
- Spring学习之旅(八)--SpringMVC请求参数
现在我们已经完成了一个无参的接口了,但是应用中有很多需要携带参数的场景,我们来看看 ** SpringMVC** 对它的支持. 参数绑定 SpringMVC 提供了一种绑定机制,通过这个机制可以从请求 ...
- Spring学习之旅(六)Spring AOP工作原理初探
AOP(Aspect-Oriented Programming,面向切面编程)是Spring提供的关键技术之一. AOP基于IoC,是对OOP(Object-Oriented Programming ...
- Spring学习之旅(十)--MockMvc
在之前的 Spring学习之旅(八)--SpringMVC请求参数 我们是通过在控制台输出来验证参数是否正确,但是这样做实在是太耗时间了,我们今天来学习下 MockMvc,它可以让我们不需要启动项目就 ...
- Spring Aop(四)——基于Aspectj注解的Advice介绍
转发地址:https://www.iteye.com/blog/elim-2395315 4 基于Aspectj注解的Advice介绍 之前介绍过,Advice一共有五种类型,分别是before.af ...
- Spring Aop(二)——基于Aspectj注解的Spring Aop简单实现
转发地址:https://www.iteye.com/blog/elim-2394762 2 基于Aspectj注解的Spring Aop简单实现 Spring Aop是基于Aop框架Aspectj实 ...
- Spring框架学习之注解配置与AOP思想
上篇我们介绍了Spring中有关高级依赖关系配置的内容,也可以调用任意方法的返回值作为属性注入的值,它解决了Spring配置文件的动态性不足的缺点.而本篇,我们将介绍Spring的又一大核心 ...
随机推荐
- Python-OpenCV 图像叠加加权实现
函数说明 cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) → dst 1 参数说明 src1 – first input ...
- 推荐:7 月份值得一看的 Java 技术干货!
月底了,又到了我们总结这一个月 Java 技术干货的时候了,又到了我们给粉丝免费送书的日子了. 7 月份干货总结 Oracle 发布了一个全栈虚拟机 GraalVM 一文带你深入拆解 Java 虚拟机 ...
- iOS学习——(转)NSObject详解
本文主要转载自:ios开发 之 NSObject详解 NSObject是大部分Objective-C类继承体系的根类.这个类遵循NSObject协议,提供了一些通用的方法,对象通过继承NSObject ...
- react-create-app 构建react项目的流程以及需要注意的地方
Hello 小伙伴们,如果觉得本文还不错,记得给个 star , 小伙伴们的 star 是我持续更新的动力!GitHub 地址 React 系列文章代码地址 一 目录 不折腾的前端,和咸鱼有什么区别 ...
- Java使用OkHttps工具类调用外部接口
前言 现在公司业务已止不是传统的增删改查等简单的业务处理操作,而是对数据各种联调三方接口与其他系统进行交互等,那么就需要我们在后台java中进行外部接口的调用,本文采用OkHttps工具类对接微信接口 ...
- node-sqlite3 学习笔记
* 使用sqlite3持久化数据 * 需求:把一个数组中的每个对象,每个对象中的属性,存到xxx.db文件中去,像数据库一样的去操作它 * 功能:1. 创建数据库(数据库存在的话,那就直接打开) * ...
- IT老人,给后辈的十一点建议
我已经在IT业打拼9年了,从完全自学成为技术团队leader到PM也确实总结了不少的经验,自己也经常跟学弟学妹聊天,分享职场经验,当老家有人报考计算机或者从事相关工作时也会咨询我的意见,我很明白IT人 ...
- Android切换横竖屏不销毁前台Activity,也不影响后台Activity
在切换屏幕方向的时候,Activity默认会走销毁->重建的生命周期,而有时候我们不希望如此,就需要做些额外的设置了: 1.在AndroidMainifest.xml中对应的Activity标签 ...
- 在koa中想要优雅的发送响应?看这就对了
背景 前不久把项目中用了很久的一个伪中间件撸成了一个npm包发布了出去. 为什么叫伪中间件?正常的中间件的引用方式, 就拿body-parser为例. var Koa = require('koa') ...
- Java 锁优化
一.重量级锁 Java中,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的.但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的.而操作系统实现 ...