開発者ドキュメント

Spring MethodInvokingFactoryBeanの例


Spring MethodInvokingFactoryBeanタイプ階層、width = 590、height = 312

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>
モバイルバージョンを終了