[Seasar-user:11973] [s2container] 複数のコンポーネント定義を取得する方法
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2007年 12月 7日 (金) 17:13:44 JST
関修康です。
コンポーネント定義を取得する際に、
特定のパッケージ以下の定義 || 特定の命名規則に従った定義 を
取得する方法はありますか??
findComponentDefs(componentKey)
findAllComponentDefs(componentKey)
これらの componentKey を正規表現や、共通インターフェースを渡す方法
等を試しましたが出来ませんでした。
やりたいことは、たいした機能では無いのですが、
RMIサーバーを起動した後に、何がサービスとして立ち上がったかを
分かりやすいように表示させたいと考えています。
// RMIサーバー起動
GenericS2ContainerInitializer initializer = new GenericS2ContainerInitializer();
initializer.setConfigPath("app.dicon");
initializer.initialize();
// ルートコンテナ取得
container = SingletonS2ContainerFactory.getContainer();
// 〜Serviceと言う名前のコンポーネントか、〜〜.service パッケージ以下の
// コンポーネント定義 を取得したい
ComponentDef[] componentDefs = container.findAllComponentDefs("〜Service");
// RMIのサービスメソッドを明示的に表示
System.out.println(componentDefs.length + " 個のサービスが開始されました。" );
for (ComponentDef def : componentDefs) {
System.out.println( " * " + def.getComponentName() );
}
[Seasar-user:6319] コンテナに登録されているPOJOなクラスにインジェクトしたい
に同じような話題が有り、s2containerのfindAllComponentDefsを
以下のような形に編集する形が詳細されていましたが、
ちょっと敷居が高いかなぁと思いまして、質問させて頂きました。
final Pattern pattern = Pattern.compile(".*Job");
final List l = new ArrayList();
Traversal.forEachComponent(container,
new Traversal.ComponentDefHandler() {
public Object processComponent(ComponentDef componentDef) {
Class clazz = componentDef.getComponentClass();
if (clazz != null && p.matcher(clazz.getName()).matches) {
l.add(componentDef);
}
return null;
}
});
以上、宜しくお願い致します。
Seasar-user メーリングリストの案内