2012-06-18 132 views
0

我是AOP的新手,特别是Spring AOP。Spring AOP @annotation

我想用某种特定的方法记录执行时间。我阅读Spring文档 并认为最好的解决方案是创建带注释切入点的方面。

它看起来像:

@Around("@annotation(com.x.y.MethodExecutionTime)") 
public Object methodExecutionTimeLog(ProceedingJoinPoint joinPoint) throws Throwable 
    StopWatch stopWatch = new StopWatch(); 

    Object retVal = null; 
    try { 
     stopWatch.start(); 
     retVal = joinPoint.proceed(); 
     stopWatch.stop(); 
     logger.info("Execution time: " + stopWatch.getTotalTimeMillis() + " ms"); 
    } catch(Throwable e) { 
     logger.error("Execution time: " + stopWatch.getTotalTimeMillis() + " ms"); 
     throw e; 
    } 
    return retVal; 
} 

标注在方法中使用:

@Override 
@MethodExecutionTime 
public <T> T copy(Class<T> destType) { 

    T t = ReflectionHelper.newInstance(destType); 

    copyTo(t); 

    return t; 
} 

Spring XML配置:

<context:spring-configured /> 
<aop:aspectj-autoproxy proxy-target-class="true" /> 

,但它会记录什么。

我正在使用Spring 3.0.5

任何想法?由于

+0

你能后的代码使用这个注解?你可以发布Spring Spring AOP的设置吗? –

+1

您是否在春季xml中启用了aop?显示与aop相关的xml spring配置的一部分。 –

+0

我发布了它,是否有必要添加一些其他选项到Spring XML配置文件? – vlcik

回答

1

如果一切配置正确,应该Spring AOP的局限性之一(其默认配置至少,),即:

  • 对象应用方面应加以管理由Spring

  • 调用应该从“外部”该对象的起源(即应该从应用程序上下文,而不是与new创建获得),即当你调用同一个对象

    的另一种方法方面不应用
  • <aop:aspectj-autoproxy>应为对象相同的应用程序上下文中声明应用方面(特别是在典型的Spring Web MVC应用程序applicationContext.xml...-servlet.xml形式不同的应用程序上下文)

+0

嗨axtavt,你可以请检查我的帖子上Spring AOP - http://stackoverflow.com/questions/31984258/basic-aop-program-throws-beancurrentlyincreationexception – user3181365