【问题标题】:problems with Native AspectJ with Spring使用 Spring 的 Native AspectJ 的问题
【发布时间】:2014-11-22 08:59:41
【问题描述】:

我正在使用 Spring 4 测试 AspectJ 编译时间编织(一旦我让它工作,我想在我的项目中使用它)。我有以下服务等级:

@Service
public class HelloService {

    public String sayHello(){       
        return sayHello2();
    }

    public String sayHello2(){
        return "Hello from AOP2!";
    }
}

这是我的 AspectJ 建议:

@Component
@Aspect
public class ExecutionTimeAdvice {

    @Around("execution(* com.senyume.aop.service..*(..))")
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {

        long startTime = System.nanoTime();
        Object retVal = pjp.proceed();
        long endTime = System.nanoTime();

        long duration = (endTime - startTime);

        logger.info("Method " + pjp.getSignature() + " took " + (duration/1000000.0) + " ms)");

        return retVal;
    }
}

我正在尝试根据Spring documentation 启用 AspectJ 编译时间编织。由于我正在使用注释,因此我尝试遵循提到的建议 in this thread

当我运行应用程序时,我没有看到将建议应用于 sayHello2()。我错过了什么?我在这里做错了什么?

完整源码on github

【问题讨论】:

    标签: spring spring-mvc aspectj spring-aspects


    【解决方案1】:

    您的 Gradle 构建使用 Java 编译器来构建项目。实际使用 AspectJ 编译器怎么样?如果您想使用 AspectJ,这将有很大帮助。 ;-)

    您可以使用Gradle AspectJ plugin

    【讨论】:

    • 谢谢!这是我第一个使用 AspectJ 的项目,我没有意识到我必须添加/配置编译器。
    • 在使用全新技术之前阅读一些文档总是一个好主意。 :-)
    • 我在关注 Spring 文档...不清楚我需要在构建文件中添加额外的编译器步骤。
    • Spring AOP 是基于代理的,不需要额外的编译器。 AspectJ 是/确实。在您的线程标题中,您提到了“native AspectJ”,因此应该清楚 Spring 手册不是您需要的,而是 AspectJ 手册。如果我想学习 Vi,我不会阅读 Emacs 手册,即使两者都是文本编辑器。 ;-)
    猜你喜欢
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多