AOP实现
来源:互联网 发布:淘宝技术排查异常订单 编辑:程序博客网 时间:2024/06/13 23:02
package com.even.aspect;import java.lang.reflect.Method;import javax.jms.Session;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.After;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 com.even.bean.UserInfoT;/** * 定义一个日志切面 * * @author lijiang * */@Aspectpublic class LogAspect { /** * 定义一个前置通知 */ @Before(value = "execution(* com.even.service.impl.*ServiceImpl.*(..))") public void beforeAdvice(JoinPoint jp) { //获取目标对象 System.out.println(jp.getTarget()); //获取方法名 System.out.println(jp.getSignature().getName()); System.out.println(jp.getClass().getMethods()); System.out.println(jp.getThis()); System.out.println("我是前置通知,在方法执行前进行相应操作"); } /** * 定义一个后置返回通知(afterReturning通知) * * @param rvt */ @AfterReturning(returning = "rvt", value = "execution(* com.even.service.impl.*ServiceImpl.*(..))") public void afterReturningAdvice(Object rvt) { System.out.println("我是后置返回通知,我可以在方法执行后获取到目标方法的返回"); System.out.println(rvt); } /** * 定义一个后置异常通知(afterThrowing),只能是方法抛出来异常才能生效 * * @param ex */ @AfterThrowing(throwing = "ex", value = "execution(* com.even.service.impl.*ServiceImpl.*(..))") public void afterThrowingAdvice(Throwable ex) { System.out.println("我是后置异常通知,可以在方法抛出异常时,获取目标方法"); } @After(value = "execution(* com.even.service.impl.*ServiceImpl.*(..))") public void afterAdvice() { System.out.println("我是后置通知,不管有无返回或异常都会执行,等同于finally"); } /** * 定义一个环绕通知(around) 固定参数ProceedingJoinPoint 程序连接点 * * @param jp * 程序连接点 * @return * @throws Throwable */ @Around(value = "execution(* com.even.service.impl.*ServiceImpl.*(..))") public Object aroundAdvice(ProceedingJoinPoint jp) throws Throwable { System.out.println("环绕通知,目标方法执行之前,可以修改目标方法的参数"); UserInfoT user = new UserInfoT("美女,有男朋友吗?", "耍哈儿撒"); // 可以获取到目标方法所有的参数 Object[] objs = jp.getArgs(); objs[0] = user;// //获取目标对象// Object o = jp.getTarget();// //得到setSession方法对象// Method sessionMethod = o.getClass().getMethod("setSession",Session.class);// //调用setSession方法// sessionMethod.invoke(o, sessionMethod); // 调用目标方法的执行,并得到方法的返回 Object obj = jp.proceed(objs); obj = 1909; return obj; }}
0 0
- AOP实现
- aop实现
- AOP实现
- AOP实现
- aop实现
- aop实现
- spring(AOP) 注解实现aop
- aop实现-spring2.0中的aop实现
- 注解实现AOP AOP编程 XML实现AOP
- 用Jdk实现AOP
- Spring的AOP实现
- Aspectwerkz动态实现AOP
- cglib_dynamicProxy实现aop
- 我的AOP实现
- Unity 实现 AOP
- C# AOP实现
- 用ASM实现AOP
- AspectJ如何实现AOP
- DDL、DML和DCL的理解
- Fedora23-----linux之路爬行中
- 第五周项目一-三角形类雏形
- html div 切割 上下左右 四个div
- 准备省赛,fightinginging。(内有福利代码
- AOP实现
- iOS开发之沙盒介绍和使用
- isual C++内存泄露检测—VLD工具使用说明
- Oracle SQL Developer连接报错(ORA-12505)的解决方案
- 03-树1 树的同构
- Java中的“流”的flush方法
- CRT目录与时间
- Shell - 11
- 桥接模式下主机和虚拟机相互访问服务器;主机和虚拟机共享文件