由小编的上篇博文可以一窥基于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编程工作原理初探的更多相关文章

  1. Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较

    本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring  AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...

  2. spring-AOP框架(基于AspectJ注解配置AOP)

    基于AspectJ注解配置AOP 1.加入jar包: 要在Spring应用中使用AspectJ注解,必须在classpath下包含AspectJ类库:aopalliance.jar.aspectj.w ...

  3. 基于@AspectJ注解配置切面与基于XML配置切面

    1. Waiter目标类 package com.smart.aop.advice.pointcut; public class Waiter { public void greetTo(String ...

  4. Spring学习之旅(八)--SpringMVC请求参数

    现在我们已经完成了一个无参的接口了,但是应用中有很多需要携带参数的场景,我们来看看 ** SpringMVC** 对它的支持. 参数绑定 SpringMVC 提供了一种绑定机制,通过这个机制可以从请求 ...

  5. Spring学习之旅(六)Spring AOP工作原理初探

    AOP(Aspect-Oriented  Programming,面向切面编程)是Spring提供的关键技术之一. AOP基于IoC,是对OOP(Object-Oriented Programming ...

  6. Spring学习之旅(十)--MockMvc

    在之前的 Spring学习之旅(八)--SpringMVC请求参数 我们是通过在控制台输出来验证参数是否正确,但是这样做实在是太耗时间了,我们今天来学习下 MockMvc,它可以让我们不需要启动项目就 ...

  7. Spring Aop(四)——基于Aspectj注解的Advice介绍

    转发地址:https://www.iteye.com/blog/elim-2395315 4 基于Aspectj注解的Advice介绍 之前介绍过,Advice一共有五种类型,分别是before.af ...

  8. Spring Aop(二)——基于Aspectj注解的Spring Aop简单实现

    转发地址:https://www.iteye.com/blog/elim-2394762 2 基于Aspectj注解的Spring Aop简单实现 Spring Aop是基于Aop框架Aspectj实 ...

  9. Spring框架学习之注解配置与AOP思想

         上篇我们介绍了Spring中有关高级依赖关系配置的内容,也可以调用任意方法的返回值作为属性注入的值,它解决了Spring配置文件的动态性不足的缺点.而本篇,我们将介绍Spring的又一大核心 ...

随机推荐

  1. WHERE 子句用于规定选择的标准

    WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句. (也称条件查询语句) 语法SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 下面的& ...

  2. IDEA整合Junit详细步骤

    一.添加Junit插件. 1.file-->setting-->plugins-->搜索Junit-->安装插件(一般已默认安装,无需手动安装). 二.设置Junit测试参数: ...

  3. vue webpack配置解决跨域问题

    现在基本项目都是实行前后端分离的原则,不管是ng 或者是vue 在开发中都无法避免跨域的这个问题 本人刚上手第一个vue项目,在调用api的时候出现了跨域的这个问题 这是封装好一个简单的post 请求 ...

  4. xcodebuild构建时报错unknown error -1=ffffffffffffffff Command /bin/sh failed with exit code 1

    CI今日构建时报出如下错误: /Users/xxx/Library/Developer/Xcode/DerivedData/Snowball-ebllohyukujrncbaldsfojfjxwep/ ...

  5. API防重放机制

    说说API的防重放机制 我们在设计接口的时候,最怕一个接口被用户截取用于重放攻击.重放攻击是什么呢?就是把你的请求原封不动地再发送一次,两次...n次,一般正常的请求都会通过验证进入到正常逻辑中,如果 ...

  6. Python3获取拉勾网招聘信息

    为了了解跟python数据分析有关行业的信息,大概地了解一下对这个行业的要求以及薪资状况,我决定从网上获取信息并进行分析.既然想要分析就必须要有数据,于是我选择了拉勾,冒着危险深入内部,从他们那里得到 ...

  7. 最好用的编辑器之一:Vim-Go环境搭建

    本文由Librant发表 如果说在Linux环境下,什么编辑器最好用,如果我说是VIM,估计会有一大部分人嗤之以鼻,怎么可能.VIM可能是他用过众多编辑器最难用的一个.在我司用的是云虚拟机,说实话吧, ...

  8. paramiko之ssh登录,执行cmd,下载文件

    一.paramiko远程登录及执行命令 1.1:exec_command(cmd)远程执行命令 client = paramiko.SSHClient() client.set_missing_hos ...

  9. wap开发中的cookie

    安卓和ios的wap开发,安卓中的cookie可以识别中文,但是ios不能识别,需要转码成通用码(UNICODE),解决办法:直接转成16进制码, escape('测试文字') 友情链接:http:/ ...

  10. Go基础系列:channel入门

    Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 channel基础 chann ...