使用Spring @AspectJ方式的AOP,代码
@Aspect
public class AndyaoAspect {
@Pointcut("execution(* com.andyao.Repository.get(java.lang.Integer))&& args(id)")
public void get(Integer id){
}
@Around("get(id)")
public Object fromCache(ProceedingJoinPoint pjp, Integer id) throws Throwable {
...
}
}
这段代码看上去没有什么问题,但是真正执行中,会抛出exception
@Around("get(id)")
java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting 'name pattern' at character position 6
翻阅文档发现问题所在:
写道
其他的切入点类型
完整的AspectJ切入点语言支持额外的切入点指定者,但是
Spring不支持这个功能。 他们分别是call, initialization, preinitialization,
staticinitialization, get, set, handler, adviceexecution, withincode,
cflow, cflowbelow, if, @this 和 @withincode。 在Spring
AOP中使用这些指定者将会导致抛出IllegalArgumentException异常。
Spring AOP支持的切入点指定者可能在将来的版本中得到扩展,不但支持更多的AspectJ 切入点指定者(例如"if"),还会支持某些Spring特有的切入点指定者,比如"bean"(用于匹配bean的名字)。
所以在使用spring AOP的时候不能以上面的诸如call,get等命名,不然就会报异常。
分享到:
相关推荐
spring-framework-3.1.1.RELEASE jdk1.7 环境下 can't find referenced pointcut 问题解决 换了对应的jar文件即可 aspectjrt.jar aspectj-1.6.6.jar aspectjweaver.jar
在Spring框架中,切入点(pointcut)表达式是AOP(面向切面编程)的核心组成部分,用于定义关注点的精确位置,比如哪些方法应该被拦截。切入点表达式是基于AspectJ语法的,允许开发者精确地指定要拦截的方法。下面将详细...
在`SpringExamples`压缩包中,可能包含了演示如何创建和配置Spring AOP的代码示例。通常,我们会创建一个切面类(Aspect),在这个类中定义pointcut和advice,然后在Spring配置文件中声明这个切面,使其生效。例如:...
### Pointcut表达式and、or、not在XML中的配置详解 ...这不仅有助于提高代码的可读性和可维护性,还能够使我们的应用程序更加健壮和高效。希望本文能帮助读者更好地理解和运用Spring AOP中的Pointcut表达式。
上文我们已讲完五种通知Advice注解,所以从本文开始介绍@Pointcut切点表达式,虽然Spring AOP的切点表达式尚未 全部实现 @AspectJ 的切点指示符,但是也已经足够多和灵活,本文主要介绍@Pointcut切点表达式中的@...
在微服务流行的当下,在使用SpringCloud/Springboot框架开发中,AOP使用的非常广泛,尤其是@Aspect注解方式当属最流行的,不止功能强大,性能也很优秀,还很舒心!...有任何问题,欢迎大家私信联系我. 作者:天罡gg
// 假设这里有一个变量executionTime记录了方法执行的时间 long executionTime = System.currentTimeMillis(); System.out.println(methodName + " executed in " + executionTime + "ms"); } } ``` 4. **...
切点(Pointcut)(处理方案).md
在这篇文章中,我们将深入探讨Spring中的切入点(Pointcut)概念,它是AOP的关键组成部分。 首先,我们要明白什么是AOP。AOP是一种编程范式,它允许程序员定义“方面”——关注点的模块化,这些关注点是跨越多个...
JavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_...
后来经过排查,发现是自己的写法有问题,在@Around的参数中我们使用的是runtime(),这里是有问题的! @Around: 环绕增强,相当于MethodInterceptor. 这里Around的value参数应该写的是上面的签名,而不是runTime,...
虽然AOP提供了便利,但过度使用可能导致额外的性能开销,因为每次方法调用都可能需要创建代理对象并执行通知。 10. **源码分析**: 对于深入理解,可以查看Spring AOP的源码,了解其内部是如何根据配置创建代理...
<aop:after-throwing method="exception" pointcut-ref="pointCut"/> aop异常通知 以上结合起来意思就是在调用com.spring.service包或子包下的所有方法之前或之后或抛出异常时依次调用id为logIntercepter的类中的...
<aop:after-returning method="myAfterReturning" pointcut-ref="myPointCut" returning="returnVal" /> <aop:around method="myAround" pointcut-ref="myPointCut" /> ...
1. **依赖冲突:** 如果项目中存在多个不同版本的Spring或其他依赖库,可能会导致类路径冲突,进而引发此类错误。 2. **配置错误:** `web.xml`中的`ContextLoaderListener`配置不正确,例如类名拼写错误或路径错误...
1.2 `@Pointcut` 创建切入点 1.3 通知 1.4 Spring AOP 和 AspectJ AOP 有什么区别? 2. 在 SpringBoot 中使用 Aop 功能 2.0 创建一个SpringBoot项目 2.1 引入 POM 依赖 2.1.1 引入springboot aop依赖 2.1.2 引入...
- 如果是通过基于注解的方式启用AOP,需要确保切面类上有`@Aspect`注解,并且配置类中有`@EnableAspectJAutoProxy`注解。 - 示例代码如下: ```java @Aspect public class YourAspect { @Before("execution(* ...
1. **配置错误**:不正确的配置可能导致通知不生效,例如忘记在配置文件中启用AOP代理或切点表达式定义错误。 2. **代理问题**:Spring提供了两种类型的代理,JDK动态代理和CGLIB代理。JDK代理适用于接口实现类,而...
Table of Contents ...2.3.3. 对bean命名pointcut( bean name pointcut element)的支持 2.3.4. 对AspectJ装载时织入(AspectJ load-time weaving)的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置