Spring AOP基础

 

SpringCinfig下必须有@EnableAspectJAutoProxy

//开启切面@EnableAspectJAutoProxy public class SpringConfig { }

 

 

切点表达式

可以简单理解为当直线execution()中路径的方法时将其捕获,在被捕获方法前或后运行你的方法

//切入点表达式: // @Pointcut("execution(void com.itheima.dao.BookDao.update())") // @Pointcut("execution(void com.itheima.dao.impl.BookDaoImpl.update())") // @Pointcut("execution(* com.itheima.dao.impl.BookDaoImpl.update(*))") //no // @Pointcut("execution(void com.*.*.*.update())") // @Pointcut("execution(* *..*(..))") // @Pointcut("execution(* *..*e(..))") // @Pointcut("execution(void com..*())") // @Pointcut("execution(* com.itheima.*.*Service.find*(..))") //执行com.itheima包下的任意包下的名称以Service结尾的类或接口中的save方法,参数任意,返回值任意 @Pointcut("execution(* com.itheima.*.*Service.save(..))") private void pt(){}

 

//注解必不可少 @Component @Aspect public class MyAdvice { @Pointcut("execution(* com.itheima.dao.BookDao.findName(..))") private void pt(){} //JoinPoint:用于描述切入点的对象,必须配置成通知方法中的第一个参数,可用于获取原始方法调用的参数 // @Before("pt()") public void before(JoinPoint jp) { Object[] args = jp.getArgs(); System.out.println(Arrays.toString(args)); System.out.println("before advice ..." ); } // @After("pt()") public void after(JoinPoint jp) { Object[] args = jp.getArgs(); System.out.println(Arrays.toString(args)); System.out.println("after advice ..."); } //ProceedingJoinPoint:专用于环绕通知,是JoinPoint子类,可以实现对原始方法的调用 // @Around("pt()") public Object around(ProceedingJoinPoint pjp) { //获取原方法的参数 Object[] args = pjp.getArgs(); System.out.println(Arrays.toString(args)); args[0] = 666; Object ret = null; try { ret = pjp.proceed(args); } catch (Throwable t) { t.printStackTrace(); } return ret; } //设置返回后通知获取原始方法的返回值,要求returning属性值必须与方法形参名相同 @AfterReturning(value = "pt()",returning = "ret") public void afterReturning(JoinPoint jp,String ret) { System.out.println("afterReturning advice ..."+ret); } //设置抛出异常后通知获取原始方法运行时抛出的异常对象,要求throwing属性值必须与方法形参名相同 @AfterThrowing(value = "pt()",throwing = "t") public void afterThrowing(Throwable t) { System.out.println("afterThrowing advice ..."+t); } }

 

代码来源:itheima


__EOF__

本文作者qintee
本文链接https://www.cnblogs.com/qintee/p/17239047.html
关于博主
版权声明
声援博主
posted @   qintee  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示