简单AOP示例中的UnsupportedPointcutPrimitiveException

时间:2011-06-29 06:06:55

标签: aspectj spring-aop pointcuts

我尝试在this网站中运行一个简单的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不包含“call”,但是为什么aspectj编织不起作用,你有什么想法吗?谢谢。

编辑:

在我的spring配置文件中,我只有@aspect注释类和<aop:aspectj-autoproxy />的bean定义。 我的罐子是:spring-aop-3.0.5,aopalliance,aspectjrt1.6.8,aspectjweaver1.5.0

1 个答案:

答案 0 :(得分:2)

您是否尝试使用AspectJ Eclipse plugin进行编织? (它也包含在SpringSource Tool Suite

如果在Spring配置中有一些方面配置。尝试删除它,只在项目中启用AspectJ性质。同时删除所有AspectJ jar文件,仅使用插件自动附加的文件。

通过这种设置,它至少对我有用。

更新:将方面建议编入代码

由于您的调用切入点,您从Spring容器中获得异常。但是你想要AspectJ weavingweave方面。然后,您需要使用编译时或加载时编织。编译时编织是插件提供的替代方案中最简单的替代方案。

您可以将AspectJ编译器视为也支持AspectJ的高级Java编译器。所以你可以在任何地方运行编译代码。

此外,您不需要编译插件。例如,您可以使用Ant任务进行编译,因为我已经显示here

但最简单的选择是使用插件。这也为我提供了额外的帮助,我简要介绍了here

我希望这有帮助!