首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring AOP @annotation

Spring AOP @annotation
EN

Stack Overflow用户
提问于 2012-06-18 22:37:38
回答 1查看 2.7K关注 0票数 0

我是AOP的新手,尤其是Spring AOP。

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

看起来是这样的:

代码语言:javascript
复制
@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;
}

在方法中使用注释:

代码语言:javascript
复制
    @Override
@MethodExecutionTime
public <T> T copy(Class<T> destType) {

    T t = ReflectionHelper.newInstance(destType);

    copyTo(t);

    return t;
}

Spring XML配置:

代码语言:javascript
复制
<context:spring-configured />
<aop:aspectj-autoproxy proxy-target-class="true" />

但它什么也没记录。

我使用的是Spring 3.0.5

有什么想法吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-19 00:11:35

如果其他一切都配置正确,那么这应该是Spring AOP的限制之一(至少是它的默认配置),即:

应用方面的

  • 对象应该由Spring管理(例如,它应该从应用程序上下文中获得,而不是使用new)
  • Call创建的对象应该源自该对象的“外部”,即当您调用相同object
  • <aop:aspectj-autoproxy>的另一个方法时,不应用方面应该在与要应用方面的对象相同的应用程序上下文中声明(特别是在典型的Spring Web MVC应用程序中,applicationContext.xml...-servlet.xml来自不同的应用程序上下文)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11085125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档