实战:
@Pointcut("execution(public * com.xx.modules.interfaces..*Controller.*(..))")
public void controllerMethod() {
//pointcut
}
@Before("controllerMethod()")
public void logRequestInfo(JoinPoint joinPoint) {
详解:
execution(<修饰符模式>?<返回类型模式><方法所在类的完全限定名称模式>(<参数模式>)<异常模式>?)
例子:
public String springMVCmybatic.com.my.aop.UserServiceImp(String a, int b) throw Exception{}
public * com.xx.modules.interfaces.facade..*.*(..)
Spring-AOP表达式execution()详解_修行中的彬哥哥的博客-CSDN博客_aop execution(
模糊匹配:
原来所有下级类所有方法:
..*.*(..)
类,[省略]
UserServiceImpl 指定类
*Impl 以Impl结尾
User* 以User开头
* 任意
方法名,不能省略
addUser 固定方法
add* 以add开头
*Do 以Do结尾
例子:
所有下级并指定Controller结尾的类
..*Controller.*(..)
或者直接一步到位:
@Around("execution(* com.xx.base.common.utils.RedisUtils.*(..))")
通过注解标识:
@Pointcut("@annotation(com.xx.base.common.annotation.Idempotent)")
public void executeId() {
log.debug("进入Id切点");
}
@Around("executeId()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
===============
aop 中joinpoint的使用方法
joinPoint.proceed()
在around中可以用,此時可以執行被包裹的代碼,可以根據情況來判斷是否執行被包裹的代碼,以實現控制的作用。
而且,如果(ProceedingJoinPoint point)只能@Around
Caused by: java.lang.IllegalArgumentException: ProceedingJoinPoint is only supported for around advice
spring aop调用joinPoint.proceed方法执行了两次的原因_zoujiawei6的博客-CSDN博客_joinpoint.proceed
SpringAop @Around执行两次解决方案_勇敢牛牛_的博客-CSDN博客_"@around(\"logpointcut()\")"
我发现,Around+切点是annotation,是只执行一次的(经Me验证是这样的!)。可能原因:java @around_正确理解Spring AOP中的Around advice_易保研论坛运营的博客-CSDN博客
===================
D:\project\design-demo\my-demo-spring-aop\src\test\java\org\itstack\demo\design\test\AopTest.java
如果想通过注解注入参数呢?
AOP无法将值注入参数,需要继承HandlerMethodArgumentResolver类
https://www.jb51.net/article/185454.htm
HandlerMethodArgumentResolver(参数解析器)的作用+使用小案例_翻翻oO的博客-CSDN博客_handlermethodargumentresolver