首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eclipse:如何将web项目转换为AspectJ项目,并使用AJDT插件编织并运行它?

Eclipse:如何将web项目转换为AspectJ项目,并使用AJDT插件编织并运行它?
EN

Stack Overflow用户
提问于 2009-06-08 21:34:43
回答 3查看 4.5K关注 0票数 5

我想做的事:

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

我所做的:

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

不起作用的是:

  • 当我现在启动Tomcat 6服务器时,我会得到一个异常*。

其他资料:

  • 我还没有在项目属性的AspectJ构建和AspectJ编译器部分中配置任何东西。
  • 首选项下的JDT织布说,织布是启用的。
  • 我仍然在项目属性下拥有Java构建路径和Java编译器。它们看起来就像我以前配置的那样(而上面的两个新条目还没有配置)。
  • 我的@配置对象文件的图标看起来像任何其他文件(也就是说,没有任何方面的指示,我认为应该有)。文件名是MailNotification.java (而不是.aj),但是我想它仍然可以工作,因为我正在为AspectJ使用一个Spring注释?
  • 我还没有找到任何教程或类似的教程来讲授:如何将Spring应用程序项目转换为AspectJ项目,以及如何使用AJDT插件将方面编织到文件中,所有这些都在Eclipse3.4中。如果有类似的事情,我会非常有兴趣知道的。

我想知道的是:

  • 从这里往哪里走?我只想使用Spring的@配置注释。我还使用了@Transactional,我认为它也需要AspectJ。
  • 如果可能的话,只要我的需求得到满足,我想尽可能少地学习AspectJ。这个主题看起来很有趣,但是很大,我想做的就是使用上面提到的两个Spring注释。

* Tomcat 6启动时的例外情况:

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

回答 3

Stack Overflow用户

发布于 2009-06-08 22:10:39

您是否在项目的方面路径中添加了spring-aspects.jar?

在项目属性中,在'AspectJ Build‘->’方面路径‘下,尝试添加Springaspects.jar并清理项目构建。

抱歉,你可能已经这么做了-但你没提。

票数 1
EN

Stack Overflow用户

发布于 2009-06-10 18:56:01

编译时编织似乎不起作用。尝试将下面的行添加到applicationcontext.xml中

代码语言:javascript
复制
<context:load-time-weaver />
<context:spring-configured/>

您可能还希望将以下xsd添加到xml文件中

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

有关详情,请参阅:

http://static.springframework.org/spring/docs/2.5.x/reference/aop.html#aop-aj-ltw

票数 0
EN

Stack Overflow用户

发布于 2009-06-26 05:58:19

您可以在不使用AspectJ的情况下使用@Transactional。您的配置文件应该包含如下内容以使其工作:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
  http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://www.springframework.org/schema/aop
  http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
  http://www.springframework.org/schema/tx
  http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
  http://www.springframework.org/schema/util 
  http://www.springframework.org/schema/util/spring-util-2.5.xsd"
  >
<tx:annotation-driven/>

告诉spring在创建配置bean的实例时查找@事务性注释。在找到这样的注释后,spring会向应用程序代码返回bean的一个动态代理。这个动态代理确保每当调用带注释的方法时,spring都能够拦截它以提供预期的事务行为。但是基于代理的AOP要求您根据接口而不是具体的类编写代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/967143

复制
相关文章

相似问题

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