[Seasar-user:6322] Re: コンテナに登録されているPOJOなクラスにインジェクトしたい
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2007年 2月 24日 (土) 04:00:20 JST
小林 (koichik) です.
Date: Fri, 23 Feb 2007 23:02:59 +0900
From: 加藤 潤一 <[E-MAIL ADDRESS DELETED]>
To: "[E-MAIL ADDRESS DELETED]" <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:6319] コンテナに登録されているPOJOなクラスにインジェクトしたい
> なんとなく
> ComponentDef[] defs = s2container.findAllComponentDefs(componentKey)
> でできそうなのですが、
findAllComponentDefs() は,同じキーで登録されている
全コンポーネント定義を取得するものです.
例えば
ComponentDef[] defs = s2container.findAllComponentDefs("foo");
とすればコンポーネント名が "foo" のコンポーネント定義が
全て返されます.
getComponent() を呼び出すと TooManyRegistrationRuntimeException が
スローされるような状況で使うと意味があります.
そんなわけで (どんなわけで?),
> componentKeyは、検索するクラス名とかコンポーネント名を正規表現とか指定できるのでしょうか?
というわけではありません.
> ComponentDef[] defs = s2container.findAllComponentDefs(“.*Job”);
のようなことをするには,
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;
}
});
という感じでできると思います.
# メーラで直接書いただけなのでコンパイルすら通らないかも
# しれませんが...
ただ,それと
> TeedaのPageクラスのように、コンテナに登録されているPOJOのメソッドを呼び出したいのですが、アドバイスいただければ幸いです。
とが,どう繋がるのかよく分かりませんでしたが.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-user メーリングリストの案内