`
sunbin
  • 浏览: 349557 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

转:SpringAop中@Before、@After、@Around执行顺序

 
阅读更多


首先说明,SpringAop需要有aspectjweaver这个依赖,要先加入到maven中;

Sql代码  收藏代码
  1. <dependency>  
  2.     <groupId>org.aspectj</groupId>  
  3.     <artifactId>aspectjweaver</artifactId>  
  4.     <version>1.8.8</version>  
  5. </dependency>  

 

其次,对于进行增强的方法,需要将其所在类加入到ioc容器中,如下:

 

Java代码  收藏代码
  1. @Component  
  2. public class HelloWorld {  
  3.   
  4.     public void sayHello (){  
  5.         System.out.println("Hello World!");  
  6.     }  
  7.       
  8. }  

 

 

接下来需要声明切面,切点,通知,一样需要在spring的ioc容器内,且需要@Aspect注解,

@Aspect是让spring对该进行aop扫描,这样才能扫描到该类内部的切点、通知的注解,如下:

 

Java代码  收藏代码
  1. @Aspect  
  2. @Component  
  3. public class HelloWorldAspect {  
  4.   
  5.     @Pointcut(value = "execution(* aop..sayHello(..))")  
  6.     public void pointCut (){    
  7.           
  8.     }  
  9.       
  10.     @Before(value = "pointCut()")  
  11.     private void beforeAdvice (){   
  12.                 System.out.println("===========before advice param:");  
  13.     }  
  14.       
  15.     @After( value = "pointCut()")  
  16.     private void afterAdvice (){  
  17.             System.out.println("===========after advice param:");  
  18.     }  
  19.       
  20.     @Around(value = "pointCut()")  
  21.     private void aroundAdvice (ProceedingJoinPoint pjp) throws Throwable{  
  22.         System.out.println("===========before advice param: around");  
  23.         pjp.proceed();  
  24.         System.out.println("===========after advice param: around");  
  25.     }  
  26.       
  27. }  

 这样一来,我们就完成了切点匹配,前置、后知、环绕通知的声明,然后就可以进行测试了

 

 

测试代码如下:

Java代码  收藏代码
  1. @Test  
  2. public void testAop (){  
  3.     ApplicationContext ctx = new AnnotationConfigApplicationContext(AopConfig.class);  
  4.     HelloWorld hw = ctx.getBean(HelloWorld.class);  
  5.     hw.sayHello();  
  6. }  

 

 

 

 

输出的结果如下:

 

Java代码  收藏代码
  1. ===========before advice param: around  
  2. ===========before advice param:  
  3. Hello World!  
  4. ===========after advice param: around  
  5. ===========after advice param:  

 

 

 

 所以我们得到结果:

前置时    环绕通知  ->  前置通知

后置时    环绕通知  ->  后置通知

 

另外spring中还有@AfterReturning、@AfterThrowing,这些将在下一次再写了,如果想早点看的话,可以参考下面的这个链接:

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle

分享到:
评论

相关推荐

    【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知

    本文带来的案例是:打印Log,主要介绍@Pointcut切点表达式的@annotation方式,以及 五种通知Advice注解:@Before、@After、@AfterRunning、@AfterThrowing、@Around。 本资源是@Pointcut使用@annotation的方式,结合...

    征服Spring AOP—— @AspectJ

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)则是其核心特性之一,用于实现横切关注点的模块化,如日志、事务管理等。@AspectJ是Spring AOP的一种注解驱动方式,它极大地简化了...

    Spring基础:Spring AOP简单使用

    - **注解配置**:Spring 2.5引入了基于注解的AOP,可以直接在切面类上使用@Aspect,@Before、@After、@Around等注解定义通知,@Pointcut定义切点。 4. **切点表达式** - 切点表达式是用于匹配连接点的语句,如`...

    Spring_AOP_before.rar_AOP@before怎么用_Before

    Spring AOP提供了五种不同类型的通知,包括`@Before`、`@AfterReturning`、`@AfterThrowing`、`@Around`和`@After`。`@Before`通知是最简单的一种,它在目标方法执行之前调用。 **3. @Before注解的使用** `@Before`...

    第二章:Spring AOP 基础1

    在本章"Spring AOP 基础1"中,我们主要探讨了Spring AOP(面向切面编程)的核心概念和实现方式。AOP是一种编程范式,它允许程序员定义"切面",这些切面封装了跨越多个对象的横切关注点,如日志、事务管理等。以下是...

    hualinux spring 3.15:Spring AOP.pdf

    - @Around:环绕通知,围绕着方法执行。 7. AspectJ切入点表达式 AspectJ切入点表达式用于指定通知应该在哪些连接点(如方法执行)应用。可以通过利用方法签名编写切入点表达式,也可以合并切入点表达式。还可以...

    如何在Spring Boot中使用@AfterReturning注解

    6. **考虑与其他通知类型的结合**:除了@AfterReturning,Spring AOP 还提供了@Before、@Around、@After 和@AfterThrowing 等通知类型,可以根据需求灵活选择和组合使用。 通过遵循这些最佳实践,你可以有效地利用 ...

    Spring AOP面向方面编程原理:AOP概念

    3. **灵活的通知模型**:Spring AOP提供了多种类型的通知,包括around、before、after returning、after throwing等,使得开发者可以根据实际需求选择最适合的通知类型。 4. **丰富的切入点表达式语言**:Spring ...

    第三章:Spring AOP API 设计与实现1

    22. **Schema-based配置**:包括 `&lt;aop:config/&gt;`, `&lt;aop:aspect/&gt;`, `&lt;aop:pointcut/&gt;`, `&lt;aop:around/&gt;`, `&lt;aop:before/&gt;`, `&lt;aop:after/&gt;`, `&lt;aop:declare-parents/&gt;`, 和 `&lt;aop:scoped-proxy/&gt;`,这些XML元素...

    spring aop jar 包

    Spring AOP支持五种类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **切点(Pointcut)**:切点是程序执行过程中的...

    简单spring aop 例子

    在实际项目中,你可以根据需求定义不同的通知类型,如`@After`、`@Around`、`@AfterReturning`和`@AfterThrowing`,以及复杂的切入点表达式。通过这些,你可以实现更精细的控制,如只对特定方法、异常或返回值进行...

    Spring AOP @AspectJ 入门实例

    使用`@Before`、`@After`、`@AfterReturning`、`@AfterThrowing`和`@Around`注解定义不同类型的通知,例如: ```java @After("serviceMethods()") public void logAfterServiceMethod() { System.out.println("服务...

    spring aop实例annotation方法实现

    Spring AOP支持两种主要的通知类型:方法前(Before)、方法后(After)以及环绕通知(Around)。这些通知可以通过在方法上添加特定的注解来实现,例如`@Before`、`@After`和`@Around`。 1. `@Before`注解:在目标...

    spring aop 学习笔记

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和抽象化的方法来处理系统中的交叉关注点,如日志、事务管理、安全性等。本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际...

    Spring AOP 16道面试题及答案.docx

    连接点(Joint Point)是程序执行过程中的特定点,通常在Spring AOP中,它代表一个方法的执行。而切入点(Point Cut)是匹配连接点的规则,它定义了一组连接点的集合,可以是一个断言或表达式。Advice与切入点关联,...

    Spring AOP 概念理解及@AspectJ支持

    **Spring AOP 概念理解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它允许我们通过定义“切面”来模块化横切关注点,比如日志、事务管理、性能监控等。在传统的...

    spring AOP 引入jar包,spring IOC 引入Jar包

    在提供的 `lib` 压缩包中,应包含 Spring AOP 和 Spring IOC 相关的 jar 包,如 `spring-aop-x.x.x.jar` 和 `spring-context-x.x.x.jar` 等,它们是使用这两个功能的基础。请确保引入正确的版本,并正确配置到项目的...

    spring aop练习

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点,比如日志、事务管理、性能监控等。在这个"spring aop练习"中,我们将深入探讨如何使用注解来...

    spring AOP依赖三个jar包

    在这个版本中,Spring AOP支持基于注解的切面定义,比如`@Aspect`、`@Before`、`@After`等,同时也支持基于XML配置的切面定义。这个jar包使得Spring应用程序能够方便地利用AOP特性,无需引入额外的编译工具或构建...

    spring aop 附带测试实例

    在提供的压缩包文件"springAOP"中,可能包含了以下内容: - **切面类(Aspect Class)**:包含切点和通知的Java类,可能使用了`@Aspect`注解。 - **目标类(Target Class)**:被AOP代理的对象,通常包含业务逻辑。...

Global site tag (gtag.js) - Google Analytics