|
ExtensionPoints
en , ja T2の拡張ポイントをまとめました. 拡張ポイントT2では主な振る舞いを決めるコンポーネントは置き換え可能になっています. ユーザがそれぞれのアプリケーション形態、ビジネス形態にあわせてコンポーネントを入れ替える事が可能です. NavigationNavigationインタフェースの独自実装クラスはユーザが最も使用する可能性が高いケースです. 先に説明があったように、デフォルトの挙動がそぐわない場合やユーザの嗜好にあわせたい場合、 例えばJSONクラスが内部的に使っているJSON変換ライブラリをJsonicに変換したいなど、自前でNavigationクラスを作成する事が可能です. ContainerAdapterContainerAdapterはいわゆるDIコンテナなどのコンポーネント管理フレームワークとのアダプタ機能を提供します. この機能を使えば、ユーザが自作フレームワークなどのコンポーネント管理群とシームレスに統合することが可能です. 実際に実装する際には、ベースクラスであるAbstractContainerAdapterを拡張するのが良いでしょう. PluginPluginはT2内部に組み込まれたプラグイン機構を使って、T2の振る舞いを変更する機能です. 以下のようなフェーズをもっており、Pluginクラスに対応する各メソッドがあるので、これを実装する事でT2の挙動を変更する事が出来ます.
AnnotationResolverCreatorメソッドアノテーションと引数アノテーションに対して、各リゾルバクラスを結びつけるファクトリクラスです. このクラスを拡張する事によって、独自のアノテーションとリゾルバクラスを生成したりマッピングしたりすることが出来ます. AnnotationResolverCreatorはメソッドアノテーションとそのハンドラであるActionMethodResolver、 引数アノテーションとそのハンドラであるParameterResolverを結びつける機能を提供するインタフェースです. このインタフェースはユーザによって拡張されることを意図しており、拡張方法としては主にjava.util.ServiceLoaderを使う想定です. そのため、/META-INF/services/org.t2framework.spi.AnnotationResolverCreatorというファイルを配置して、 その中に実装クラスを置くことで独自アノテーションとそのハンドラを追加したり、既存のものを変更したりすることが出来ます. WebApplicationCreatorWebApplicationCreatorはT2のコンテキストオブジェクトファクトリである、WebApplicationを生成するクラスです. このクラスを置き換える事で、T2のコンテキストオブジェクトごと置き換えたりする事が可能になります. ActionInvoker/ActionInvokerFactoryActionInvokerはアクション実行のためのインタフェースです.このクラスはユーザがアクション実行のためのプロセスを拡張する場合に 置き換えることを意図しています. 一方ActionInvokerFactoryはどのActionInvokerを実行するかと、その実行順序を決定します 拡張するにはActionInvokerFactoryをContainerAdapter経由で取得できるようにお使いのDIコンテナに登録しておく必要があります. FormResolverFormResolverはリクエストと@Formで指定されたオブジェクトをマッピングするためのインタフェースです。 デフォルトでは、org.t2framework.t2.spi.impl.FormResolverImplが使用されて、リクエストとオブジェクトをマッピングします. デフォルトのマッピングでは、リクエストのパラメータ名とオブジェクトのプロパティ名が同一の場合に型変換されて、オブジェクトをマッピングします. 変換エラーが出た場合、ErrorInfoにエラー詳細が入ります.このErrorInfoはT2のアクションメソッドの引数としてインジェクトすることが出来ます. この拡張ポイントは以下のようなケースで使用することを想定しています.
・登録方法ContainerAdapterから取得できるようにお使いのDIコンテナの登録方法で登録してください. ・使用方法以下のように、@Form#resolverClassで指定します. public Navigation execute(@Form(resolverClass = MyFormResolver.class) Employee emp, ErrorInfo errorInfo) {
...
}
| |||||||||||||||||||||||||||||||||||||