眺め読み #8 RTTI
EclipseでJava環境用プラグインを作るときは、クラスやメソッドに対応するオブジェクトを使います。org.eclipse.jdt.coreパッケージにある、ITypeやIMethodなどです。ITypeは普通のJavaでのjava.lang.Classを多機能にしたような物です。
KijimunaのRTTIとは、ITypeやIMethodなどをより使いやすくした物で、Diconエレメントや、OGNLの要素なども統合した物です。
まずはインタフェースは、まぁ、名前の通りです。
package org.seasar.kijimuna.core.rtti; IRtti IRttiFieldDescriptor IRttiPropertyDescriptor IRttiInvokableDesctiptor + IRttiConstructorDesctiptor + IRttiMethodDesctiptor extends
上記を実装しているクラスは、次の通り。
package org.seasar.kijimuna.core.internal.rtti; // IType(クラス、インタフェース)に対応 DefaultRtti implements IRtti AbstractRttiValuableDescriptor // 属性 + DefaultRttiFieldDescriptor implements IRttiFieldDescriptor // プロパティ + DefaultRttiPropertyDescriptor implements IRttiPropertyDescriptor AbstractRttiInvokableDescriptor implements IRttiInvokableDesctiptor // コンストラクター + DefaultRttiConstructorDescriptor implements IRttiConstructorDesctiptor // メソッド + DefaultRttiMethodDescriptor implements IRttiMethodDesctiptor
その他のDiconエレメントに対応するRTTIクラスは、次のような感じ。
RttiWrapper implements IRtti // <component>のキー + ComponentKeyRtti implements IComponentKey // <components> + ContainerRtti // + DirectAccessedRtti implements IDirectAccessed // + InjectedRtti
OGNLの要素については、インタフェースは無いようです。
package org.seasar.kijimuna.core.rtti.ognl; OgnlRtti // org.ognl.el.Extensionsを継承 package org.seasar.kijimuna.core.internal.rtti.ognl; OgnlExtensions extends Extensions
RTTIを取得するには、RttiLoader.loadRtti(declareName)を使います。declareNameには、データ型の完全クラス名か、プリミティブ名を指定します。その際に、キャッシュを使い同じRTTIの取得を高速化しています。
package org.seasar.kijimuna.core.internal.rtti; DefaultRttiCache implements IRttiCache
または、diconエレメントに対して、getAdapter(IRtti.class)として取得します。この場合は、そのエレメントに対応したRTTIが取得されます。