Java Eclipse:如何将web项目转换为AspectJ项目,并使用AJDT插件编织和运行它?
我想做什么:Java Eclipse:如何将web项目转换为AspectJ项目,并使用AJDT插件编织和运行它?,java,eclipse,spring,spring-aop,Java,Eclipse,Spring,Spring Aop,我想做什么: 我想在Spring中使用@Configured注释。它需要启用AspectJ。我认为使用AJDT插件进行编译时编织可以解决这个问题。在安装插件之前,应该注入@Configured对象的依赖项保持为空 我所做的: 安装了Eclipse3.4的插件 右键单击我的web项目并将其转换为AspectJ项目 启用编译时编织 什么不起作用: 当我现在启动Tomcat6服务器时,我得到一个异常* 其他资料: 我还没有在项目属性的AspectJ构建和AspectJ编译器部分配置任何内
- 我想在Spring中使用@Configured注释。它需要启用AspectJ。我认为使用AJDT插件进行编译时编织可以解决这个问题。在安装插件之前,应该注入@Configured对象的依赖项保持为空
- 安装了Eclipse3.4的插件
- 右键单击我的web项目并将其转换为AspectJ项目
- 启用编译时编织
- 当我现在启动Tomcat6服务器时,我得到一个异常*
- 我还没有在项目属性的AspectJ构建和AspectJ编译器部分配置任何内容
- 首选项下的JDT编织表示已启用编织
- 我仍然在项目属性下有Java构建路径和Java编译器。它们看起来就像我之前配置的一样(而上面两个新条目没有配置)
- 我的@Configured对象文件的图标看起来像任何其他文件(即,没有任何方面的指示,我认为应该有)。文件名是MailNotification.java(而不是.aj),但我想它应该仍然可以工作,因为我正在使用AspectJ的Spring注释
- 我还没有找到任何教程或类似的教程:如何将SpringWeb应用程序项目转换为AspectJ项目,并使用AJDT插件将方面编织到文件中,所有这些都在Eclipse3.4中。如果有类似的事情发生,我很想知道
- 从这里到哪里去?我只想使用Spring的@Configured注释。我还使用@Transactional,我认为它也需要AspectJ
- 如果可能的话,只要我的需求得到满足,我希望尽可能少地学习AspectJ。这个主题看起来很有趣,但是很庞大,我只想使用上面提到的两个Spring注释
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
您是否已将spring-aspects.jar添加到项目的方面路径中 在项目属性中,在“AspectJ构建”->“方面路径”下,尝试添加spring-aspects.jar并清理构建项目
很抱歉,您可能已经这样做了,但您没有提到。编译时编织似乎不起作用。尝试将以下行添加到applicationcontext.xml
<context:load-time-weaver />
<context:spring-configured/>
您可能还需要将以下xsd添加到xml文件中
详情请参阅:
您可以在不使用AspectJ的情况下使用@Transactional。您的配置文件应包含以下内容以使其正常工作:
<?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的实例时查找@transactional注释。找到这样的注释后,spring将bean的动态代理返回给应用程序代码。这个动态代理确保无论何时调用带注释的方法,spring都能够拦截它以提供预期的事务行为。但是基于代理的AOP要求您根据接口而不是具体的类进行编码 我还没有添加它,也没有真正进行任何特定的配置(如上所述)。我似乎找不到任何关于AJDT插件的好文档,所以我真的不知道我需要做什么:-/