由小编的上篇博文可以一窥基于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. Node.js项目拆包工程化

    背景 在我们开发的过程中,经常会遇到这样的问题,开发完了一些代码或者一个接口,别的小伙伴过来问你,代码可不可以给他复用,接口可以给他调用.这说明代码的复用和抽象对团队协作是很重要的.举个例子,如下图 ...

  2. python中使用xlrd、xlwt和xlutils3操作Excel

    简单试了下python下excel的操作,使用了xlrd.xlwt和xlutil3:xlrd可以实现excel的读取操作,xlwt则是写入excel操作,xlutils3主要是为了修改excel,简单 ...

  3. Android--UI之ListView

    前言 今天讲解一下Android平台下ListView控件的开发,在本篇博客中,将介绍ListView的一些常用属性.方法及事件,还会讲解ListView在开发中常用的几种方式,以及使用不通用的适配器 ...

  4. Docker容器中开始.Net Core之路

    开始写这篇博客前,已经尝试练习过好多次Docker环境安装,.Net Core环境安装了,在这里替腾讯云做一个推广,假如我们想学习.练手.net core 或是Docker却苦于没有开发环境,服务器也 ...

  5. C# 获取 sha256

    C# 获取 sha256, 输入可以是 字符串,也可以是 字节流流: 自定义的输入类型的枚举: public enum Sha26ParseType { StringType, StreamType ...

  6. MFC原理第二讲.MFC的初始化过程

    MFC原理第二讲MFC的初始化过程 一丶简介 通过上一讲.我们手工模拟了一个MFC程序. 但是上一讲留下了疑问. 就是WinMain在哪.以及消息处理在哪里. 这一节主要就是讲解Winmain在哪里. ...

  7. Java设计模式学习记录-状态模式

    前言 状态模式是一种行为模式,用于解决系统中复杂的对象状态转换以及各个状态下的封装等问题.状态模式是将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象的状态可以灵活多变.这样在客户端使 ...

  8. MySQL中间件之ProxySQL(1):简介和安装

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL简介 之前的文章里,介绍了一个MySQL的中间件: ...

  9. Perl基础速成

    本文是针对没有Perl基础,但想用perl一行式命令取代grep/awk/sed的人,用于速学Perl基础知识. Perl一行式系列文章:Perl一行式程序 perl的-e选项 perl命令的-e选项 ...

  10. Go基础系列:函数(2)——回调函数和闭包

    回调函数和闭包 当函数具备以下两种特性的时候,就可以称之为高阶函数(high order functions): 函数可以作为另一个函数的参数(典型用法是回调函数) 函数可以返回另一个函数,即让另一个 ...