【发布时间】:2011-12-15 19:21:01
【问题描述】:
在项目中,我们使用注解来定义方面。
很遗憾,我无法让 eclipse 在建议的方法旁边显示标记。
在另一个项目中,我们使用 XML 来定义方面和 eclipse 显示标记。
我最好发布一些代码来澄清:
首先要建议一个bean:
package aop.test;
import org.springframework.stereotype.Service;
@Service
public class Worker {
public void work() {}
}
然后是方面:
package aop.test;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Service;
@Aspect
@Service
public class WorkerLogger {
@Before("execution(void aop.test.Worker.work())")
public void log() {
System.out.println("working...");
}
}
最后是一个主要方法来准备 ApplicationContext,获取 bean 并运行建议的方法:
package aop.test;
import org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context;
context = new AnnotationConfigApplicationContext();
context.register(AnnotationAwareAspectJAutoProxyCreator.class);
context.scan("aop.test");
context.refresh();
context.getBean(Worker.class).work();
}
}
我在 Eclipse 中使用 STS 插件和 STS 本身进行了尝试。我从来没有在work() 旁边看到一个红色箭头,表明它是建议的。
我错过了什么?
【问题讨论】:
-
我将示例更改为使用 XML 定义工作人员和记录器、方面和
<aop:aspectj-autoproxy/>的 bean,但在建议的方法中仍然看不到任何标记。我必须启用某些选项吗? -
当我启用 Spring Aspects Tooling 时,它只会添加 AspectJ Nature 并且我可以看到标记,但 AspectJ Nature 不是我想要的。建议使用非托管实例或静态方法,这意味着使用 AspectJ 编译器。
标签: java eclipse spring annotations aop