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]