5

私がしたいこと:

  • @Configured アノテーションを Spring で使いたい。AspectJ を有効にする必要があります。コンパイル時のウィービングに AJDT プラグインを使用すると、この問題が解決すると考えました。@Configured オブジェクトに注入されるはずだった依存関係にプラグインをインストールする前は、null のままでした。

私がやった事:

  • Eclipse 3.4 用のAJDT: AspectJ 開発ツールプラグインをインストールしました。
  • Web プロジェクトを右クリックして、AspectJ プロジェクトに変換しました。
  • コンパイル時のウィービングを有効にしました。

機能しないもの:

  • Tomcat 6 サーバーを起動すると、例外が発生します*。

その他の情報:

  • プロジェクト プロパティの AspectJ Build および AspectJ Compiler 部分で何も構成していません。
  • [プリファレンス] の下の JDT ウィービングは、ウィービングが有効になっていると表示します。
  • プロジェクトのプロパティの下に、まだ Java ビルド パスと Java コンパイラがあります。そして、以前に構成したように見えます (上記の 2 つの新しいエントリは構成されていません)。
  • 私の @Configured オブジェクトファイルのアイコンは、他のファイルのように見えます (つまり、あるべきだと思う側面などの兆候はありません)。ファイル名は (.aj ではなく) MailNotification.java ですが、AspectJ に Spring アノテーションを使用しているので、それでも機能するはずですか?
  • Spring WebアプリケーションプロジェクトをAspectJプロジェクトに変換し、AJDTプラグインを使用してアスペクトをファイルに織り込む方法をすべてEclipse 3.4内で教えるチュートリアルなどは見つかりませんでした。そのようなものがそこにある場合、私はそれについて知りたいと非常に興味があります.

私が知りたいこと:

  • ここからどこへ行く?Spring の @Configured アノテーションを使いたいだけです。AspectJも必要だと思う@Transactionalも使用しています。
  • 可能であれば、自分のニーズが満たされる限り、AspectJ をできるだけ勉強したくありません。このテーマは興味深いようですが、巨大です。私がやりたいことは、上記の 2 つの 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
4

3 に答える 3

1

プロジェクトのアスペクト パスに spring-aspects.jar を追加しましたか?

プロジェクトのプロパティで、'AspectJ Build' -> 'Aspect Path' の下に spring-aspects.jar を追加して、プロジェクトをクリーン ビルドしてみてください。

申し訳ありませんが、すでにこれを行っている可能性がありますが、言及していません。

于 2009-06-08T22:10:39.933 に答える
0

コンパイル時のウィービングが機能していないようです。以下の行を applicationcontext.xml に追加してみてください

<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

于 2009-06-10T18:56:01.697 に答える
0

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/>

構成された Bean のインスタンスを作成するときに @transactional アノテーションを探すように Spring に指示します。そのようなアノテーションを見つけると、Spring は Bean の動的プロキシをアプリケーション コードに返します。この動的プロキシは、アノテーション付きメソッドが呼び出されるたびに、Spring がそれをインターセプトして、意図したトランザクション動作を提供できるようにします。しかし、プロキシベースの AOP では、具体的なクラスではなくインターフェイスに対してコーディングする必要があります。

于 2009-06-26T05:58:19.470 に答える