問題タブ [aspectj]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
853 参照

java - パッケージ内のすべてのメソッドに対して @Around アドバイスが呼び出されていない

LoggingAspect クラスに以下のコードがあり、これが次のようなメソッドに対して実行されることを期待しています

gov.ssa.rome.service.impl.save() gov.ssa.rome.dao.impl.save()

しかし、何があっても一度だけ実行されます。どうしてか分かりません。autowire を使用して dao をサービス層に配線しました。本当にありがとうございました。

このメソッドをすべてのアプリケーション フローに対して実行して、フローをログに表示するにはどうすればよいですか?

0 投票する
1 に答える
701 参照

eclipse - Petclinic spring-mvc の例がビルドされない

https://src.springframework.org/svn/spring-samples/にアクセスして、ペットクリニックを構築しようとしました。やった:

  • mvn クリーン インストール
  • mvn 日食: 日食

私はEclipseにインポートしましたが:

pom.xmlが間違っていて、依存関係を自分で追加しなければならない可能性はどのくらいですか?

0 投票する
9 に答える
91562 参照

java - 同じクラス内のメソッドによる Spring @Transaction メソッド呼び出しが機能しない?

私はSpring Transactionが初めてです。なんか変だなと思ったのですが、ちゃんと理解できたのかもしれません。

メソッドレベルでトランザクションを行いたいのですが、同じクラス内に呼び出し元メソッドがあり、それが気に入らないようです。別のクラスから呼び出す必要があります。それがどのように可能かわかりません。

誰かがこの問題を解決する方法を知っているなら、私は大いに感謝します. 同じクラスを使用して、注釈付きのトランザクション メソッドを呼び出したいと考えています。

コードは次のとおりです。

0 投票する
2 に答える
1347 参照

eclipse - 新しいEclipseプロジェクトを作成するときに「AspectJに変換」アクションをスクリプト化する方法は?

(ほとんど) すぐに使える Eclipse プロジェクトを作成するコマンド ライン スクリプトがあります。Maven の Eclipse プラグインを使用し、コードの標準設定をレポから .settings にコピーするなど、他のスクリプト化された手順がいくつかあります。この 1 つのテンプレートから新しいプロジェクトを頻繁に作成する必要があるため、これは非常に便利です。(ブランチ作業、1 回限りの開発実験など)

しかし、プロジェクトは AspectJ を使用します。「AspectJに変換」する必要があることをEclipseに自動的に伝える方法がわからないため、新しいプロジェクトを作成するたびにEclipse内でこれを手動で行う必要があります。

コマンドラインからEclipseプロジェクトを構成して、それ自体をAspectJプロジェクトと見なす方法はありますか? Eclipse 3.4.2 と AspectJ プラグイン 2.0.0 を使用しています。

0 投票する
2 に答える
935 参照

java - メソッドの途中でクロスカットの問題

AOP (AspectJ、SpringAOP など) が、以下のメソッド周辺のポイントカットでクロスカットの問題を処理 (アドバイス) すると便利です。

「サンドイッチ」コード

AOP は、以下のユーザー コードに重複する懸念事項をクロスカットする傾向がありますか? どのように?

「スパゲッティ」コード

ありがとう!

0 投票する
3 に答える
3741 参照

java - Guice vs AspectJ

私は数か月前にGUiceを使用していましたが、戻ってみると、Guiceのドキュメントと例を読み直して、コードで何をしたかを理解する必要があります。

しかし、私がAspectJを見ると、それはすべて直感的すぎます。これは、Java言語の直感的な拡張です。座ってすぐにAspectJコードを書くことができると思います。

そのため、Guiceの追求を断念し、AspectJを採用したいと思っています。特にSpringがAspectJコードを生成しているという事実。

AspectJの上にGuiceのどの機能があり、Guiceを放棄するのを思いとどまらせる必要がありますか?

GoogleがGuiceを放棄して、代わりにAspectJを使用しないのはなぜですか?

逆に、Guiceの直感性に加えて、Guiceを放棄するように促すAspectJの機能は何ですか?

ここでの質問で「織り込む」ことが許可される場合、Java言語がAspectJとマージされないようにしたり、Javaの将来のバージョンで同様の「アスペクト」を提供したりすることを妨げるものは何ですか?

幸せなdelete-azillaをトリガーするには、この質問は一般的すぎる可能性があることに気付きます-しかし、さらに具体的な質問があれば、質問する必要はなく、自分が知らないことをgoogle/bingで確認するだけです。知る。ご覧のとおり、私のGuiceの知識はひどく劣化しているため、自分の手書きも認識できません

0 投票する
2 に答える
10466 参照

java - 注釈付きパラメータを使用したポイントカットマッチング方法

次の場合、メソッドに一致するポイントカットを使用してアスペクトを作成する必要があります。

  1. MyAnnotationForMethodで注釈が付けられます
  2. そのパラメーターの1つ(多く持つことができます)は@MyAnnotationForParamで注釈が付けられます(ただし、他の注釈も持つことができます)。

アスペクトクラスは次のようになります

注釈付きの方法

日食あり->警告:ポイントカットについて:

http://download.eclipse.org/tools/ajdt/35/updateの最後のaspectJプラグインを使用する

アスペクトj1.6.9を使用したMavenコマンドラインを使用

注釈:

そしてもちろん、それは正しく機能しません。

何が悪いのか教えていただけますか?

どうも。

0 投票する
2 に答える
7113 参照

java - Spring @Transactional は、動的 Jdk プロキシとアスペクトの両方として適用されます。

@Transactional アノテーションを介して Spring 宣言型トランザクションを既存の Java プロジェクトに追加しようとしています。

問題が発生したとき (この質問とは関係ありません)、完全なデバッグ ログをオンにしました。不思議なことに、私は次のことに気付きました。

いくつかのデバッグの後、最初の 3 つのログ エントリ (スレッド バインド セッションが見つかり、そのトランザクションを使用している) が UserService クラスの JdkDynamicAopProxy によって生成されていることがわかりました。

ただし、最後のログ メッセージは驚くべきものに見えます。メソッド実行前のジョインポイントで呼び出されます。AnnotationTransactionAspect のソースを見ると、トランザクション マネージャーが設定されていない場合にこのメッセージが生成されます。この場合、Spring はこの側面で依存性注入を実行しないためです。

私には、トランザクションの 2 つの異なる「スタイル」が適用されているように見えます: 動的プロキシとアスペクトです。私が持っている唯一のトランザクション関連の構成は次のとおりです。

プロジェクトで AspectJ を使用していますが、aop.xml に AnnotationTransactionAspect アスペクトが登録されていません。Spring 3.0.2.RELEASE を使用しています。

私はこれに警戒すべきですか?Spring はこの側面を登録しますか? annotation-drivenAspectJ を使用する場合は使用しないでください。

0 投票する
3 に答える
6383 参照

java - AspectJロードタイムウィーバーがすべてのクラスを検出するわけではありません

Springの宣言型トランザクション(@Transactionalアノテーション)を「aspectj」モードで使用しています。ほとんどの場合、正常に機能しますが、機能しない場合もあります。私たちはそれを呼ぶことができますLang(それが実際に呼ばれているものだからです)。

ロードタイムウィーバーに問題を特定することができました。aop.xmlでデバッグと詳細ログをオンにすることで、織り込まれているすべてのクラスが一覧表示されます。問題のあるクラスLangは、実際にはログにまったく記載されていません。

次に、の先頭にブレークポイントを設定し、クラスがロードされるLangときにEclipseがスレッドを一時停止するようにします。Langこのブレークポイントは、LTWが他のクラスを織り込んでいるときにヒットします。したがって、ウィービングLangを試みて失敗し、それを出力しないか、または他のクラスに、Lang実際にウィービングする機会を得る前にロードを強制する参照があると推測しています。

ただし、これを小規模に再現できないため、これをデバッグし続ける方法がわかりません。続行する方法について何か提案はありますか?


更新:他の手がかりも歓迎します。たとえば、LTWは実際にどのように機能しますか?たくさんの魔法が起こっているようです。LTWからさらに多くのデバッグ出力を取得するためのオプションはありますか?私は現在持っています:


私は前にそれについて言及するのを忘れました:春のエージェントはLTWを可能にするために使用されています、すなわちInstrumentationLoadTimeWeaver


Andy Clementの提案に基づいて、AspectJトランスフォーマーがクラスを通過したことがあるかどうかを調べることにしました。にブレークポイントを設定すると、他のクラス(JettyのWebAppClassLoaderのインスタンス)と同じクラスローダーによってロードされているにもかかわらずClassPreProcessorAgent.transform(..)、クラスがそのメソッドに到達することはないようです。Lang

次に、にブレークポイントを設定しましたInstrumentationLoadTimeWeaver$FilteringClassFileTransformer.transform(..)。その1つでさえもヒットしませんLang。また、使用しているクラスローダーに関係なく、ロードされたすべてのクラスに対してメソッドを呼び出す必要があると思います。これは次のようになり始めています:

  1. デバッグに問題があります。EclipseLangがロードしていると報告したときにロードされていない可能性があります
  2. Javaのバグ?とてつもない、しかし私はそれが起こると思います。

次の手がかり:電源を入れたところ、トランスがインストルメンテーションに追加される前に、ロードが時期尚早である-verbose:classように見えます。奇妙なことに、私のEclipseブレークポイントはこの読み込みをキャッチしません。Lang

これは、春が新たな容疑者であることを意味します。ConfigurationClassPostProcessorクラスをロードしてそれらを検査する処理が行われているようです。これは私の問題に関連している可能性があります。


の次の行ConfigurationClassBeanDefinitionReaderにより、Langクラスが読み取られます。

特に、そのクラスのすべてのメソッドのすべてのパラメータクラスをロードするクラスをmetadata.hasAnnotatedMethods()呼び出します。getDeclaredMethods()クラスはアンロードされるはずなので、これで問題は解決しないのではないかと思います。不明な理由でJVMがクラスインスタンスをキャッシュしている可能性がありますか?