当前位置: 首页 > 面试题库 >

错误::: 0找不到引用的切入点注释

徐鸿文
2023-03-14
问题内容

我试图创建一个方面来监视某些方法的时间执行。当我尝试运行测试时,出现以下错误:

Caused by: java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut annotation
    at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:301)
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:207)

加载ApplicationContext时。

我将注释定义为:

@Retention(RetentionPolicy.RUNTIME)
@Target(
{
    ElementType.METHOD, 
    ElementType.TYPE
})
public @interface TimePerformance {

}

这是方面代码:

@Aspect
public class MonitorImpl{

    private static final Log LOG = LogFactory.getLog(MonitorImpl.class);


    @Pointcut(value="execution(public * *(..))")
    public void anyPublicMethod() { }



    @Around("anyPublicMethod() && annotation(timePerformance)")
    public Object  timePerformance(ProceedingJoinPoint pjp,TimePerformance timePerformance) throws Throwable {

        if (LOG.isInfoEnabled()) {
             LOG.info("AOP - Before executing "+pjp.getSignature());
        }

        Long startTime = System.currentTimeMillis();

        Object result = pjp.proceed();

        Long stopTime = System.currentTimeMillis();

        LOG.info("MONITOR TIME_EXECUTION "+pjp.getSignature()+" : "+(stopTime-startTime));

        if (LOG.isInfoEnabled()) {
             LOG.info("AOP - After  executing "+pjp.getSignature());
        }

        return result;

    }


}

且配置为:

<!-- AOP support -->
<bean id='stateAspectImpl' class='eu.genetwister.snpaware.ui.aspect.StateAspectImpl' />
 <bean id='monitorImpl' class='eu.genetwister.snpaware.monitor.MonitorImpl' />
<aop:aspectj-autoproxy>
    <aop:include name='stateAspectImpl' />
     <aop:include name='monitorImpl' />
</aop:aspectj-autoproxy>

我只是在这里检查了许多问题,但大多数问题都是使用Aspectj的1.7版作为解决方案。我在用:

 <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.7.0</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.7.0</version>
    </dependency>

其他解决方案指向方法签名中变量的名称,但是如您所见,这没有错误。

有谁知道问题出在哪里吗?

谢谢


问题答案:

我在方面类中使用此配置解决了问题

@Around("execution(* *(..)) && @annotation(timePerformance)")
public Object  timePerformance(ProceedingJoinPoint pjp, TimePerformance timePerformance) throws Throwable

但是现在的问题是,方面尚未执行。



 类似资料:
  • 我得到以下错误。有人帮我出去吗。 Axis2.AxisFault:未找到的操作的endpoint引用(EPR)是/services/echo,WSA操作=null。如果此EPR以前是可访问的,请与服务器管理员联系。在org.apache.axis2.engine.dispatchPhase.checkPostConditions(dispatchPhase.java:102),在org.apach

  • 我试图在方法注释上创建一个Aeyj切入点,但我总是用不同的方法失败。我使用的是aspectj自动代理(我在Spring上下文中没有配置其他编织)。我的类如下所示: 所以我想知道为什么aspectj不会创建切入点。我设法使用执行(**(…)使其工作抛出一些exc)这对我来说很好,但我仍然想知道我做错了什么。 另外,由于是在接口中定义的,我指定了实现类的注释,有没有办法让它以这种方式工作?其他代理机制

  • 我不能用“”运算符和多个注释来做切入点。我试图为一些JBehave注释创建一个切入点(@givid、@then、@when)。 为这三个注释创建切入点的语法是什么?因为我在其他切入点中使用了逻辑OR运算符,所以我假设它类似于: 但是它不起作用,我得到一个不一致的绑定异常。我尝试了其他组合,但找不到一个这样做的诀窍。

  • 我们要学习Mybatis的源码,第一步肯定是要找到学习的切入点,我们先从一个简单的Demo开始,重新感受一下Mybatis的使用方式,并从中可以切入到mybatis源码的学习过程中去。 Hello World 首先我们新建一个Hello World工程,用来体会Mybatis的使用方式。 数据准备 连接Mysql服务器,新建一个名为mybatis的数据库,并创建一个包含了两个字段(id,name)

  • 我想让用户输入和,这样我们就可以计算矩形的面积。我有两个类是和。问题是,当我试图运行此代码时,有一个错误: 程序有多个入口点 如何解决这个问题? 这是我的代码:

  • 我试着构建应用程序,但一直在获取/Users/gouravkarwasara/Desktop/News2/app/build/generated/source/kapt/debug/com/gourav/news/DataBinderMapperImpl。java:9:错误:找不到符号导入com。古拉夫。消息数据绑定。ActivityDetailBindingImpl;^符号:类ActivityD