ComponentInvoker
org.seasar.extension.componentにComponentInvokerを追加しました。
ComponentInvoker
package org.seasar.extension.component;public interface ComponentInvoker {
public Object invoke(String componentName,
String methodName, Object[] args)
throws Throwable;
}
ComponentInvokerImpl
S2Container上に登録されているコンポーネントを名前、メソッド名、引数で呼び出したい場合にはこいつが使えます。
public class ComponentInvokerImpl implements ComponentInvoker {private S2Container container;
public Object invoke(String componentName,
String methodName, Object[] args)
throws Throwable {Object component = container.getComponent(componentName);
BeanDesc beanDesc = BeanDescFactory.getBeanDesc(
component.getClass());
try {
return beanDesc.invoke(component, methodName, args);
} catch (InvocationTargetRuntimeException e) {
throw e.getCause();
}
}public void setContainer(S2Container container) {
this.container = container;
}
}
今後、汎用的なコンポーネントがあれば、このパッケージ(extension.component)を利用したいと思います。