【Spring】AOP 面向切面编程 | 您所在的位置:网站首页 › 萦绕围绕环绕的区别 › 【Spring】AOP 面向切面编程 |
纠正: 环绕通知方法必须有返回值是错的,如果目标方法的返回值为空,则环绕通知的返回值就可以为void。还有,方法也不是必须要有ProceedingJoinPoint参数 总结: Aspectj表示切面执行时间,用的通知(Advice)。 这个通知可以使用注解表示。 5个注解表示切面的5个执行时间, 这些注解叫做通知注解。 @Before : 前置通知@AfterRetunring: 后置通知@Around: 环绕通知@AfterThrowing:异常通知@After:最终通知环绕置通知方法的定义 1)方法是public 2)方法是必须有返回值, 推荐使用Object类型 3)方法名称自定义 4)方法必须有ProceedingJoinPoint参数 public Object myAround(ProceedingJoinPoint pjp){ } 使用aspectj框架的注解,实现环绕通知 在业务接口中添加一个方法:doFirst![]() ![]() ![]() 属性:value 切入点表达式 位置:在方法定义的上面 返回值:Object ,表示调用目标方法希望得到执行结果(不一定是目标方法自己的返回值) 参数: ProceedingJoinPoint, 相当于反射中 Method。 作用:执行目标方法的,等于Method.invoke()===方法执行 👇 @Around(value="execution(* *..SomeServiceImpl.doFirst(..))") public Object myAround(ProceedingJoinPoint pjp){ System.out.println("执行了环绕通知的myAround方法"); return "Hello Around,不是目标方法的执行结果"; }调用doFirst测试: 1.在目标方法的前和后都能增强功能 2.控制目标方法是否执行 3.修改目标方法的执行结果。 1.想要正常执行doFirst(目标方法):
通过环绕通知可以执行切面类代码也可以控制目标方法(doFirst)的执行。 返回值可以保持不变👇 获取方法执行时的参数值:pjp.getArgs() //获取方法执行时的参数值 String name = ""; Object[] args = pjp.getArgs(); if( args != null && args.length > 0){ Object arg = args[0]; if(arg !=null){ name=(String)arg; } }
|
CopyRight 2018-2019 实验室设备网 版权所有 |