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