(基于注解方式)AOP断言表达式execution

实战: 

  @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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值