[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 メーリングリストの案内