`
baobeituping
  • 浏览: 1062381 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

spring aop的注解配置中,前置,后置,环绕通知,以及异常通知怎么获得被代理方法的参数

 
阅读更多

定义的接口

package com.aspectaop;

public interface IUserDao {

 /* (non-Javadoc)
  * @see com.aspectaop.IUserDao#save()
  */
 /* (non-Javadoc)
  * @see com.aspectaop.IUserDao#save(java.lang.String)
  */
 public abstract void save(String name);

 /* (non-Javadoc)
  * @see com.aspectaop.IUserDao#update()
  */
 /* (non-Javadoc)
  * @see com.aspectaop.IUserDao#update()
  */
 public abstract String update();

 /* (non-Javadoc)
  * @see com.aspectaop.IUserDao#doThrow()
  */
 public abstract void doThrow();

}

 

接口实现类,分别定义了传入的参数,返回有参数以及异常等方法

package com.aspectaop;

public class UserDaoImpl implements IUserDao  {

 /* (non-Javadoc)
  * @see com.aspectaop.IUserDao#save()
  */
 /* (non-Javadoc)
  * @see com.aspectaop.IUserDao#save(java.lang.String)
  */
 public void save(String name)
 {
  System.out.println("这是保存方法!");
 }
 /* (non-Javadoc)
  * @see com.aspectaop.IUserDao#update()
  */
 /* (non-Javadoc)
  * @see com.aspectaop.IUserDao#update()
  */
 public String update()
 {
  System.out.println("这是更新方法!");
  return "这是更新方法返回的值!";
 }
 
 /* (non-Javadoc)
  * @see com.aspectaop.IUserDao#doThrow()
  */
 public void doThrow()
 {
  throw new RuntimeException("返回了例外!");
 }
}

定义切面方法

package com.aspectaop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class AspectBean {

 @Pointcut("execution(* com.aspectaop.UserDaoImpl.*(..))" )
 public void anyWay()
 {}
 
 @Before("anyWay() && args(name)")

//这里采取的是args(name)的方法,表示被代理的方法传入的参数,在doValidate中的name要和这个名字对应,

并且这里定义的是String表示只有方法中传入参数类型是STRING的,才会被拦截
 public void doValidate(String name)
 {
  System.out.println("这是事前方法.."+"获得事前方法的参数:"+name);
 }
 
 @AfterReturning(pointcut="anyWay()",returning="result")

//这里用returning表示要返回方法的值,然后作为参数传递到doAfterReturning中,注意doAfterReturning中的result也要和returning="result"中的result对应
 public void doAfterReturning(String result)
 {
  System.out.println("这是最终方法.."+"获得最终方法的参数:"+result);
 }
 
 @AfterThrowing(pointcut="anyWay()",throwing="e")

//该部分解释和返回值的一致
 public void doAfterThrowing(Exception e)
 {
  System.out.println("例外通知:"+e);
 }
 
 
 @Around("anyWay()")

//环绕通知必须按照以下方法签名来写,除了doAround的这个方法名可以自己定义和pjp这个名字可以自己定义以外,然后执行pjp.proceed()方法才会被执行
 public Object doAround(ProceedingJoinPoint pjp) throws Throwable{
  System.out.println("执行前");
  Object o = pjp.proceed();
  System.out.println("执行后");
  return o;
 }
}

分享到:
评论

相关推荐

    spring的Aop中的前置通知,后置通知以及环绕通知简单代码

    在Spring AOP中,有三种主要的通知类型:前置通知、后置通知和环绕通知。下面将详细解释这三种通知,并通过简单的代码示例进行演示。 **1. 前置通知(Before Advice)** 前置通知在目标方法被调用之前执行,但无法...

    Spring-AOP(前置/后置/环绕)通知的例子

    在这个例子中,我们将深入探讨Spring AOP中的前置通知、后置通知以及环绕通知的实现方式。 前置通知(Before Advice)在目标方法执行前触发,通常用于执行验证、初始化等操作。在Spring AOP中,我们可以使用`@...

    前置后置环绕异常通知

    本教程将深入探讨Spring AOP中的四种通知类型:前置通知、后置通知、环绕通知以及异常通知,并通过实际案例展示如何创建自定义切入点。 1. **前置通知**: 前置通知在目标方法执行前触发,通常用于执行验证或准备...

    spring AOP注解的应用1

    本篇主要探讨的是如何利用Spring AOP的注解来实现这些功能,包括前置通知、后置通知、返回通知和异常通知。 ### 前置通知(Before通知) 前置通知在目标方法执行之前运行。在Spring AOP中,我们使用`@Before`注解...

    Spring AOP运用Spring AOP技术,要求包含前置通知、后置通知、环绕通知、返回通知、异常返回通知。

    1、编写切面类,包含权限审核方法和日志记录方法,这两个方法将来会织入到...5、编写案例,运用Spring AOP技术,要求包含前置通知、后置通知、环绕通知、返回通知、异常返回通知。请掌握这五种通知的特点,及应用场景

    Spring 前置通知和后置通知

    本文将深入探讨Spring AOP中的前置通知和后置通知,以及它们在实际开发中的应用。 前置通知是指在目标方法执行之前执行的通知。在Spring AOP中,这通过`@Before`注解实现。这个注解用于定义一个切点表达式,匹配到...

    spring aop注解版

    在本主题中,我们将深入探讨Spring AOP的注解版,它是基于Java注解的实现,简化了配置并提高了代码的可读性。 首先,让我们理解AOP的基本概念。AOP是一种编程范式,允许程序员定义“切面”,这些切面封装了跨越多个...

    spring aop 注解例子

    要启用注解驱动的 AOP,需要在 Spring 配置文件中添加 `<aop:aspectj-autoproxy>` 标签,或者在 Java 配置类中使用 `@EnableAspectJAutoProxy` 注解。 6. **运行环境** 由于这是一个简单的例子,因此运行环境的...

    spring注解aop配置详解

    我们可以使用`@Aspect`注解来定义一个切面类,`@Before`、`@After`、`@Around`、`@AfterReturning`和`@AfterThrowing`注解来定义不同类型的通知,它们分别对应于前置通知、后置通知、环绕通知、返回后通知和异常后...

    SpringAOP的注解配置

    Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是...在`myaop`项目中,你可以找到具体的示例代码,包括切面类、切入点表达式以及相应的注解使用,通过这些示例可以更深入地理解Spring AOP的注解配置。

    spring简单前置通知、后置处理

    `Spring的前置后置通知jar包`可能包含了一些预构建的AOP通知实现,例如日志库,它们可以方便地集成到Spring应用中,提供对方法执行前后的拦截能力。 总的来说,Spring的AOP机制提供了强大的灵活性,使得我们可以将...

    spring aop注解方式、xml方式示例

    通知是在特定连接点(join point)执行的代码,可以是前置通知、后置通知、异常通知、最终通知或环绕通知。使用`@Before`、`@After`、`@AfterReturning`、`@AfterThrowing`和`@Around`注解定义不同的通知,例如: `...

    springAOP配置动态代理实现

    3. **通知类型**:Spring支持五种不同类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 4. **切点表达式**:切点表达式...

    SpringAop xml方式配置通知

    在Spring框架中,AOP通过代理实现,可以使用XML配置或注解进行配置。本篇文章主要聚焦于Spring AOP的XML配置通知。 **一、AOP概念解析** 1. **切面(Aspect)**:一个关注点的模块化,例如事务管理就是一个切面。...

    SpringAOP注解特棒例子

    通过这个"SpringAOP注解方式"的示例,你可以了解到如何在Spring中使用注解定义切面,编写通知,并配置切入点。这种方式大大简化了AOP的配置,使得代码更加模块化和易于维护。学习并掌握Spring AOP的注解使用,对于...

    sping aop注解配置

    在Spring AOP中,注解配置是一种简洁且直观的使用方式,它极大地简化了配置过程,避免了XML配置的繁琐。以下是使用注解配置Spring AOP的关键知识点: 1. **切面(Aspect)**:切面是AOP的核心概念,它封装了多个...

    springAop的配置实现

    **Spring AOP 配置实现详解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它允许我们通过分离关注点来简化应用程序的开发。在传统的面向对象编程中,业务逻辑与日志记录...

    Spring AOP 注解方式

    3. **@Before**、**@After**、**@Around**、**@AfterReturning** 和 **@AfterThrowing**:这些是不同的通知类型,分别代表前置通知、后置通知、环绕通知、返回后通知和异常后通知。例如,我们可以使用`@Before`在...

    spring aop jar 包

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

Global site tag (gtag.js) - Google Analytics