由小编的上篇博文可以一窥基于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. Ubuntu 16.04 系统无法挂载u盘的问题

    Ubuntu系统无法挂载U盘设备,提示错误为:mount:未知文件系统类型“exfat”.这是因为Ubuntu默认情况下是不允许挂载U盘的,想在Ubuntu系统下挂载U盘,就要用下面的方法了. sud ...

  2. 解读JavaScript 之引擎、运行时和堆栈调用

    转载自开源中国 译者:Tocy, 凉凉_, 亚林瓜子, 离诌 原文链接 英文原文:How JavaScript works: an overview of the engine, the runtim ...

  3. ModelState 错误信息输出

    在MVC的项目中,我们通常情况下,为了方便(偷懒),会直接使用 !ModelState.IsValid 来判断实体的验证是否正确,但是这样对于用户的体验是不好的,当填写的内容比较多的时候,用户需要自己 ...

  4. [原创]K8uac bypassUAC(Win7/Wi8/Win10) 过46款杀软影响所有Windows版本

    [原创]K8uac bypassUAC(Win7/Wi8/Win10) 过46款杀软影响所有Windows版本 工具: k8uac编译: VC++ 作者:K8哥哥发布: 2018/11/25 1:30 ...

  5. ASCII码字符串普通加密解密-android

    //android后台Java //ASCII加密 String str = e.getText().toString(); StringBuilder s = new StringBuilder() ...

  6. python 分享一个通过 (key1.key2.key3) 形式获取嵌套字典值的方法

    最近在做接口自动化测试,响应的内容大多数是多层嵌套的json数据,如果一层层的去剥,效率不高,脚本繁重,所以写了一个可以通过(key1.key2.key3)形式获取嵌套字典值的方法,如有不对或者需要优 ...

  7. 原生js ajax请求

    什么是ajax AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新. 这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新, ...

  8. springboot redis(单机/集群)

    前言 前面redis弄了那么多, 就是为了在项目中使用. 那这里, 就分别来看一下, 单机版和集群版在springboot中的使用吧.  在里面, 我会同时贴出Jedis版, 作为比较. 单机版 1. ...

  9. linux 命令 — sort、uniq

    sort uniq sort:对行或者文本文件排序 uniq:去除重复的行 常用 sort -n file.txt 按数字进行排序 sort -r file.txt 按逆序进行排序 sort -M f ...

  10. 【原创】C++之自定义高效的swap(1)

    1 问题背景     当交换两个包含了指针成员的类,我们最想看到的是直接交换其指针.但是当我们调用std::swap标准库这个模板函数时,通常它都会复制3个指针指向的对象作为交换所用,缺乏效率.如下: ...