タグ

動的Proxyに関するt_43zのブックマーク (3)

  • 動的プロキシをシリアライズする具体的方法

    Javassistを使った動的プロキシの作成」エントリと「 替わりのオブジェクトをシリアライズするwriteReplace()/readResolve()」エントリを組み合わせると,実行時にその場で作った動的プロキシクラスを元にnewしたインスタンスをシリアライズし,異なるJavaVMプロセスにてデシリアライズできるようになる。今回はその具体的な方法を紹介しよう。 まずは,動的プロキシの対象となる抽象クラスを以下とする。これは「 Javassistを使った動的プロキシの作成」で取り上げたものと同一である。 package test; public abstract class Component { private int cnt; public abstract void onClick(); public void output() { System.out.println(cnt

  • Javassistを使った動的プロキシの作成

    前回の「 動的プロキシとシリアライズ」エントリで紹介した通り,今回はその第一歩として,Javassistを使って動的プロキシを作成するための方法を紹介してみようと思う。 Javassistは,動的プロキシを作成するためのライブラリというよりは,バイトコードを操作するためのライブラリである。とは言っても,バイトコードに対する低レベルな処理は,Javassistに完全にお任せで大丈夫である。JavassistのAPIを使っている限りでは,バイトコードに関する知識はほぼ0で良い。Javassistを使うと,クラスファイルを作り出すこともできるし,ファイルとして生成しなくても,その場でClassオブジェクトとして利用することが可能である。生成したいクラスについて,親クラスやインタフェースを実装させることもできるし,フィールドやメソッドを追加することもできる。 では,さっそく例を見ていこう。まず,次

  • 動的プロキシとシリアライズ

    一般的なDIコンテナに大抵標準装備されている機能に,AOPがある。例えば,あるオブジェクトのあるメソッドが呼び出された際に,そのメソッドを処理する前に何らかの処理を挟み込む,などがAOPである。この機構を実現するためには,動的プロキシと呼ばれる機能が必要となる。 デザインパターンのProxyパターンは,あるオブジェクトと同等のインタフェースを持つProxyクラスを作成し,そのProxyクラスの中から来のオブジェクトを呼びだすようにする。クライアントは来のオブジェクトを触っている感覚なのだが,実際にはProxyクラスという「代理」のものが応答し,来のオブジェクトを当に呼び出すかどうかの判断とか,引数の内容を変更してしまったり,来のオブジェクトからスローされる例外の処理をProxyクラス内でしてしまう,などの機能拡張をProxyクラスで行うというパターンである。クライアント側は,Pr

  • 1