タグ

JAVAとJavassistに関するt_43zのブックマーク (3)

  • Javassistでクラスのバイトコードを直接書き換える:CodeZine

    はじめに Javaのクラスファイルというのは、ソースコードからコンパイルして作成する――これが、長い間の常識でした。しかし昨今、この常識を覆すような技術が次々と登場しています。最近のフレームワークなどを見ていて、ふと不思議に思ったことはありませんか? XMLで必要な情報を定義すると、自動的にそのクラスが生成されたり、既にあるクラスの機能が書き換わったりする。プログラマがソースコードを書くこともなく、必要なクラスが作成されてしまう。そうした「クラスの自動生成」の技術を大幅に進歩させたのが「クラスのバイトコードを直接書き換える」技術です。対象読者Javaを使ったプログラム作成を行っている中級レベルのプログラマ。クラスのバイトコード操作について興味のあるひと。同じようなBeanクラスをひたすら作り続けるのに、いい加減、嫌気がさしている人。 クラス生成の新しい形とは? 最近のフレームワークなどでは

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

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

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

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

  • 1