`
baobeituping
  • 浏览: 1042441 次
  • 性别: 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中的前置通知,后置通知以及环绕通知简单代码

    前置后置环绕异常通知

    spring框架的aop前置、后置、环绕、异常通知以及自定义切入点实例

    spring AOP注解的应用1

    关于AOP注解前置通知、后置通知、返回通知、异常通知的注解注释及应用

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

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

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

    NULL 博文链接:https://z18022893621.iteye.com/blog/1956146

    Spring 使用AspectJ 实现 AOP

    Spring spectJ AOP 前置通知 后置通知 返回通知 异常通知 环绕通知

    spring aop 详细介绍

    一. 准备工作 二. Spring -Aop入门 三. Spring-Aop 前置通知、后置通知、环绕通知、异常通知实现 四. Spring-Aop 之Pointcut+advice+Advisor 实现 五.Spring-Aop 引入的介绍

    Spring Aop的简单实现

    一个基于配置文件的Spring AOP的实现。实现了前置通知,后置通知,以及拦截器的功能,配置中有详细的注释。

    Spring框架 一个AOP程序.zip

    AOP程序 Spring框架 前置通知 后置通知 异常通知 环绕通知

    spring AOP代理机制.docx

    sping AOP面向切面的编程,程序运行过程中动态加入所需代码等,对公共的问题进行集中处理,具体的实现有动态代理与静态代理,本文通过对AOP的代理机制,前置、后置、环绕、异常的通知进行了综合总结和运用!

    深入解析Spring AOP源码:从原理到实现,全方位掌握Java AOP编程精髓

    Spring AOP支持不同类型的通知,如前置通知(Before)、后置通知(After)、返回后通知(After-returning)、抛出异常后通知(After-throwing)和环绕通知(Around)。这种机制使得开发者可以在运行时动态地应用这些...

    spring aop demo

    1、spring切入点 2、spring前置织入,传入参数处理 3、spring后置织入,传入参数处理 4、环绕织入,参数及返回值处理 5、返回后织入,返回值处理 6、异常织入,异常处理 maven环境下,测试用例可直接运行

    springboot-aop

    springboot配置AOP切面:前置通知、后置通知、环绕通知、返回通知、异常通知

    尚硅谷佟刚Spring4代码及PPT.rar

    Bean、通过 FactoryBean 配置 Bean、通过注解配置 Bean、泛型依赖注入、AOP 基础、前置通知、后置通知、返回通知、异常通知、环绕通知、切面的优先级、切点表达式、使用 XML 文件的方式配置 AOP、使用 JdbcTemplate ...

    Spring中Aop的使用

    Spring中Aop的使用!~ 关于前置通知,后置通知,环绕通知,异常通知的使用!~ 简单的demo!~

    本地调用AOP

    spring的简化aop,前置通知,后置通知的简写

    Spring AOP配置源码

    <aop:before method="before" pointcut-ref="pointCut"/> aop前置通知 <aop:after method="after" pointcut-ref="pointCut"/> aop后置通知, <aop:after-throwing method="exception" pointcut-ref="pointCut"/> aop...

    Spring AOP @Aspect 基本用法

    1、@Aspect放在类头上,把...3.4、@AfterThrowing,后置【catch】通知,放在方法头上,使用throwing来引用抛出的异常。 3.5、@Around,环绕通知,放在方法头上,这个方法要决定真实的方法是否执行,而且必须有返回值。

    Spring 4.0 AOP 面向切面Maven测试程序

    Spring 4.0 AOP 面向切面测试程序,涉及通知类型包括前置通知\后置通知\返回通知\异常通知\环绕通知,项目采用Maven搭建!

Global site tag (gtag.js) - Google Analytics