Eclipse:如何将Web项目转换为AspectJ项目并使用AJDT插件进行编织和运行?

5 java eclipse spring spring-aop

我想做的事:

  • 我想在 Spring 中使用 @Configured 注释。它需要启用 AspectJ。我认为使用 AJDT 插件进行编译时编织可以解决这个问题。在安装插件之前,应该注入我的 @Configured 对象的依赖项仍然为空。

我做了什么:

  • 为 Eclipse 3.4安装了AJDT:AspectJ 开发工具插件。
  • 右键单击我的 web 项目并将其转换为 AspectJ 项目。
  • 启用编译时编织。

什么不起作用:

  • 当我现在启动 Tomcat 6 服务器时,出现异常*。

其他信息:

  • 我没有在项目属性的 AspectJ Build 和 AspectJ Compiler 部分配置任何东西。
  • 首选项下的 JDT Weaving 表示启用了编织。
  • 我仍然在项目属性下有 Java 构建路径和 Java 编译器。它们看起来像我之前配置过的(虽然上面两个新条目没有配置)。
  • 我的@Configured 对象文件的图标看起来像任何其他文件(即没有任何方面的指示,我认为应该有)。文件名是 MailNotification.java(而不是 .aj),但我想它应该仍然有效,因为我正在为 AspectJ 使用 Spring 注释?
  • 我还没有找到任何教程或类似的教程:如何将 Spring Web 应用程序项目转换为 AspectJ 项目并使用 AJDT 插件将方面编织到文件中,所有这些都在 Eclipse 3.4 中。如果那里有类似的东西,我会非常有兴趣了解它。

我想知道的是:

  • 然后去哪儿?我只想使用Spring的@Configured注解。我也在使用 @Transactional,我认为它也需要 AspectJ。
  • 如果可能的话,只要满足我的需求,我想尽可能少地学习 AspectJ。这个主题看起来很有趣,但是很庞大,我想做的就是使用上面提到的两个 Spring 注释。

*** Tomcat 6 启动时的异常:

Caused by: java.lang.IllegalStateException: ClassLoader [org.apache.catalina.loader.WebappClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:spring-agent.jar
at org.springframework.context.weaving.DefaultContextLoadTimeWeaver.setBeanClassLoader(DefaultContextLoadTimeWeaver.java:82)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1322)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
... 41 more
Run Code Online (Sandbox Code Playgroud)

小智 1

您是否已将 spring-aspects.jar 添加到项目的方面路径中?

在项目属性中,在“AspectJ Build”->“Aspect Path”下尝试添加 spring-aspects.jar 并清理构建项目。

抱歉,您可能已经这样做了 - 但您没有提及。