問題タブ [load-time-weaving]
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.
spring-boot - Tomcat 8、Spring Boot、@Configurable LoadTimeWeaving -javaagent なし?
ドメイン オブジェクトをセットアップしようとして@Configurable
います (Spring コンテナーによって管理されていません)。
を JVM 引数として追加することでこれを機能させましたが-javaagent:path/to/spring-instrument.jar
、この -javaagent を配置する必要があるかどうかは 100% 明確ではありません。これをTomcat 8で実行しています。ドキュメントを誤解している可能性がありますが、これを達成するために別のメカニズム、特に次の行を使用できるようです。
TomcatInstrumentableClassLoader
on 以上は定義しないでくださいTomcat 8.0
。代わりに、Springが戦略InstrumentableClassLoader
を通じて Tomcat の新しいネイティブ機能を自動的に使用できるようにします。TomcatLoadTimeWeaver
以下のコードサンプル:
-javaagent を指定せずにこれらの @Configrable オブジェクトを織り込む方法はありますか? スタンドアロンの Tomcat 8 サーバーに WAR としてデプロイするとき、および/または「ファット」jar として起動するときに組み込みの Tomcat 8 サーバーを使用するときに、これを達成できるかどうかを知りたいと思います。
スタンドアローンのTomcat 8サーバーにデプロイしてもエラーは発生しませんが、getMyService()
上記のメソッドはnullを返します。ファット jar として起動すると、起動時に次のエラーがスローされます。
Caused by: java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar
本当の問題はSpecify a custom LoadTimeWeaver
、Tomcat 8 でどうすればよいかということだと思います。ドキュメントに記載されているように、何も自動的に起こっているようには見えませんが、それが正確に何を意味するのかを誤解している可能性があります。
spring - spring aop load-time weaving を使用する際の問題は、それ自体の内部でメソッド呼び出しを処理します
私は次のようなビジネスクラスを持っています:
アスペクトクラスは次のとおりです。
春にこれらすべての Bean を構成した後、LTW を使用してオンにします
もちろん、aspectjrt、aspectj-weaver、spring-instrument は配置されています。-javaagent:path/spring-instrument.jar は VM オプションに渡され、aop.xml は META-INF の下にあります。
次のようなテストを実行すると:
結果は完璧に見える
しかし、内部で sayHello を呼び出すテストを実行すると、
インターセプトはまったく発生しません
私がLTWを使用する理由は、「this」または「super」を使用したメソッド呼び出しも傍受できるようにしたいからですが、そうしなかったようです。誰かが問題を指摘するのを手伝ってくれますか?私が見逃したものはありますか?
- - - - - - - - - - - - - - 編集 - - - - - - - - - - - ------------
いくつかのデバッグの後、どこが間違っているかを発見しました
実際には、パッケージcom.bussiness
の下に「クラス A」があり、パッケージcom.aspect
の下
に「クラス Aspect」があります
。 xmlのようにフォローする
これは正しくありません。次のように変更した後、織り込む必要があるクラスを含むパッケージである必要があります。
それは最終的に動作します
java - アスペクトを実行可能なjarに織り込んで実行する
メソッドが別のメソッドを呼び出すたびに、メソッドに関する詳細を出力するアスペクトを作成しました。Java ライブラリを除外したい。
jARファイルにアスペクトを織り込み、JARを実行しようとしています。
私は長い間苦労して多くのチュートリアルを読んでいますが、タスクを達成できません。
これがアスペクトのコードです
weaved jar を生成するために使用したコマンド
織り込んだJARを実行してみたコマンド
エラー
Ajc.properties ファイル (特定のタイプが見つからないときにエラーが発生していたため。
java - Spring AOP および AspectJ Load-Time Weaving: プライベート メソッドに対してアラウンド アドバイスが 2 回呼び出される
Spring AOP と AspectJ Load-Time Weaving を使用して、コード内の特定のプライベート/保護/パブリック メソッドの実行時間を測定します。
これを行うために、実行時間を測定する必要があるメソッドに注釈を付ける次の注釈を書きました。
次のアスペクトも書きました。
私のSpring構成は次のとおりです。
src/main/resources/META-INF
また、プロジェクトのディレクトリに次のものを配置しましたaop.xml
。
また、次の Spring AOP および/または AspectJ 固有の依存関係を POM に追加しました。
- org.aspectj:aspectjrt:1.8.6
- org.aspectj:aspectjtools:1.8.6
- org.springframework:spring-aop:4.1.6
さらにorg.aspectj:aspectweaver:1.8.6
、Tomcat を起動して Java エージェントとして使用しています。
注釈付きのパブリック メソッドと保護されたメソッドではすべてが正常に機能しますが、注釈付きのプライベート メソッドの場合、私の側面のアドバイスは 2 回呼び出され、その理由はわかりません。
java - 異なるクラスローダー クラスの AOP
jboss にデプロイされたアプリケーションがあります。その中に .war (Web アプリケーション) と .sar (サービス層) があります。これら 2 つは、異なるクラス ローダーによってロードされています。ここで、.war ファイルから .sar ファイルにあるクラスに AOP を適用したいと考えています。これらのサービス (.sar クラス) を Web レイヤーで JNDI を使用して参照しています。Webモジュールからサービス層クラスにAOPを適用するにはどうすればよいですか。
spring - 春の aop xml を aop.xml と読み込み時間の織り方で構成するにはどうすればよいですか?
Spring AOP に「Hello word」アプリケーションが 1 つあり、XML で構成されています。次のようになります。
私の春の設定は次のようになります。
保護されたメソッドが原因で機能しないため、次のようにaop.xmlを使用してロードタイムウィービングを使用しようとしました:
アスペクトのソースコード:
しかし、アノテーション構成に変更した場合にのみ機能しません。SOS PLZ
java - @ChangeTracking 関係で ManyToMany を保存すると PersistenceException がスローされる
ManyToMany リレーションを保存しようとすると、データベース例外が発生します。
両方のインスタンスが挿入されていることがログに表示されるため、奇妙です。
ChangeTracking は eclipselink 機能であり、アプリケーションを実行するには javaagent が必要です。
ChangeTracking とそれが期待どおりに機能するエージェントがなければ、挿入が行われます。所有者側を保存しても機能します(コメント行を参照)
ファイルは github にあります: https://github.com/zbiro/many2many
サンプルは次のコマンドで開始できます
Java ファイル:
persistence.xml
build.gradle
私の質問は、なぜそれが起こっているのか、どうすればそれを回避できるのかということです.