javaagentでクラスの書き換え

★★★ Live配信告知 ★★★

Azureでクラウドネイティブな開発をするための方法について、世界一わかりみ深く説明致します!!複数回シリーズでお届けしている第7回目は、「どんと来いDocker」をテーマに、なかなかにわかりにくいDockerの概念を優しく紐解きます!!
【2021/10/28(木) 12:00〜13:00】

こんにちは、サイオステクノロジー武井です。今回はjavaagentでクラスの書き換えをしてみたいと思います。

javaagentとは?

簡単に言いますとクラスのローディングをフックする、つまりクラスの読み込み前に何らかの処理を行ったり、クラスの書き換えをできたりします。

具体的な使いみちとしては、最近流行りのAPM(Application Performance Management)を実現する際に、通信ライブラリなどをフックして、処理時間の計測を行ったりとかに使ったりします。

早速やってみよう!!

では、早速実践です。ここではcom.example.api.Api1というクラスをcom.example.api.Api2に書き換えてみます。

javaagentを呼び出す方のクラス

まずはjavaagentを呼び出す方のクラスを作ります。

書き換え対象のcom.example.api.Api1です。単純に標準出力にhogeしているだけです。

 

書き換え対象のcom.example.api.Api1を呼び出すメインクラスです。

 

上記のソースをコンパイルしてできたjarをapi.jarとします。

javaagent本体のクラス

javaagent本体のクラスを作成します。

com.example.api.Api1の書き換え後のクラスcom.example.api.Api2を作成します。

 

javaagentのメインのクラスを作成します。

 

これをコンパイルするわけですが、その際、マニフェストファイルに以下を加えてください。

Premain-Class: com.example.agent.App

 

上記のソースをコンパイルしてできたjarをagent.jarとします。

呼び出してみよう!!

以下のコマンドを実行してください。

 

hogeと表示されるcom.example.api.Api1が、fugaと表示されるcom.example.api.Api2に書き換えられたことがわかりますよね。

 

ということで無事クラスの書き換えができました(•ө•)♡





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!


ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

Be the first to comment

Leave a Reply

Your email address will not be published.


*