Spring MethodInvokingFactoryBeanの例

Springでは、メソッドを実行するためにhttp://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/config/MethodInvokingFactoryBean.html[
MethodInvokingFactoryBean
]を使用して、getその結果を別のBeanに挿入します。
このメソッドの呼び出し側は、XML設定で非常に便利ですが、アノテーションやSpringの表現にはあまり使用されません。
1. MethodInvokingFactoryBean
1.1現在のJavaバージョンを取得する例。
Spring XML設定
<!-- 1. Run getProperties() method from java.lang.System -->
<bean id="propsFromSystem"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="java.lang.System"/>
<property name="targetMethod" value="getProperties"/>
</bean>
<!-- 2. Run getProperty() method from propsFromSystem, with argument 'java.version' -->
<bean id="javaVersion"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref="propsFromSystem"/>
<property name="targetMethod" value="getProperty"/>
<property name="arguments" value="java.version"/>
</bean>
<!-- 3. Inject the result into javaUtils bean -->
<bean id="javaUtils"
class="com.mkyong.web.JavaUtils">
<property name="javaVersion" ref="javaVersion"/>
</bean>
package com.mkyong.web;
public class JavaUtils {
String javaVersion;
public String getJavaVersion() {
return javaVersion;
}
public void setJavaVersion(String javaVersion) {
this.javaVersion = javaVersion;
}
}
1.2 Javaに相当する。
System.getProperties().getProperty("java.version")
2. MethodInvokingBean
2.1 Javaコード、少し長いですが、動作します。
public void startDBM() {
MethodInvokingBean mBean = new MethodInvokingBean();
mBean.setTargetClass(DatabaseManagerSwing.class);
mBean.setTargetMethod("main");
String[]args = new String[]{ "--url", "jdbc:hsqldb:mem:testdb", "--user", "sa", "--password", "" };
mBean.setArguments(args);
try {
mBean.prepare();
mBean.invoke();
} catch (Exception e) {
e.printStackTrace();
}
}
2.2 `MethodInvokingBean`はXML設定には優れていますが、Javaコードではうまくいきません。ただ1行のコードで同じことができます。
public void startDBM() {
DatabaseManagerSwing.main(
new String[]{ "--url", "jdbc:hsqldb:mem:testdb", "--user", "sa", "--password", "" });
}
2.3 XMLの例は、String[]配列引数を `MethodInvokingBean`に渡す方法を示しています。
<bean class="org.springframework.beans.factory.config.MethodInvokingBean">
<property name="targetClass" value="org.hsqldb.util.DatabaseManagerSwing"/>
<property name="targetMethod" value="main"/>
<property name="arguments">
<list>
<value>--url</value>
<value>jdbc:derby:memory:dataSource</value>
<value>--user</value>
<value>sa</value>
<value>--password</value>
<value></value>
</list>
</property>
</bean>
参考文献
JavaDoc]。
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/config/MethodInvokingBean.html
[MethodInvokingBean
JavaDoc]