我尝试在此站点中运行一个简单的 aop 示例。我有 spring aop 和 aspectj,aspectjweaver jars:
@Aspect
public class StringAspect {
@Pointcut("call(* String.toLowerCase())")
public void toLowerCasePointcut() {}
@Around("toLowerCasePointcut()")
public String toLowerCaseAroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
String text = ((String) joinPoint.getTarget()).toUpperCase();
return text;
}
}
当我在 Test.java 中像“AaBbCc”.toLowerCase() 一样运行这个示例时,我得到了这个异常;
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean ... Initialization of bean failed; nested exception is org.aspectj.weaver.tools.UnsupportedPointcutPrimitiveException: Pointcut expression call(* String.toLowerCase()) contains unsupported pointcut primitive 'call'
Spring AOP 不包含“调用”,但是为什么 aspectj 编织不起作用,您有什么想法吗?谢谢你。
编辑:
在我的 spring 配置文件中,我只有 @aspect 注释类的 bean 定义和<aop:aspectj-autoproxy />
. 我的罐子是:spring-aop-3.0.5、aopalliance、aspectjrt1.6.8、aspectjweaver1.5.0