生成されたBeanを調べる
では、このBeanAlter.addAccesorを利用してBeanクラスを修正してみましょう。まず、これを利用するプログラムのmainメソッドを用意します。
※JassistSample mainの修正
public static void main(String[] args) {
BeanAlter.addAccesor(args[0]);
printTestBean();
}
他のメソッド類は省略してあります。ここでは、実行時の引数であるargs[0]のテキストをそのままaddAccesorの引数に渡すようにしてあります。実行時に"jp.tuyano.jasample.TestBean"といったテキストを引数に渡すようにしておけば、TestBeanの修正を行なうことができる、というわけです。
続いて、BeanのサンプルであるTestBeanを修正しておきましょう。サンプルとして、以下のようにしておけばよいでしょう。
※テスト用のTestBean.java
package jp.tuyano.jasample;
public class TestBean {
public String samplestr;
public int sampleint;
public int test;
}
このTestBeanには、ごらんのように3つのpublicフィールドを用意しておきました。これをコンパイルしてTestBean.classを作成し、mainメソッドに引数を渡して実行させてみます。そして、作成されたTestBean.classを、またコンパイルしてどうなっているか調べてみることにしましょう。
※TestBean.classのデコンパイル結果
package jp.tuyano.jasample;
public class TestBean
{
private String samplestr;
private int sampleint;
private int test;
public TestBean()
{
}
public String getSamplestr()
{
return samplestr;
}
public void setSamplestr(String s)
{
samplestr = s;
}
public int getSampleint()
{
return sampleint;
}
public void setSampleint(int i)
{
sampleint = i;
}
public int getTest()
{
return test;
}
public void setTest(int i)
{
test = i;
}
}
ごらんのように、3つのフィールドはすべてprivate化され、それらにアクセスするためのアクセサがきれいに準備されます。最初に用意しておいたTestBean.javaのソースコードを比べてみてください。publicフィールドを書いておくだけで、これらの処理が自動追加されるなんて、かなり便利だと思いませんか?
Javassistを使えば、このように既に完成したクラスファイルを自由に書き換えることができるようになります。ある意味、究極のツールといえるのではないでしょうか。