2014-12-04 607 views
12

是否可以在Spring配置文件中調用靜態方法?從spring配置調用靜態方法配置

public MyClass { 

    public static void staticMethod() { 
     //do something 
    } 

} 
<bean id="myBean" class="MyClass"> 
    <!-- invoke here --> 
</bean> 
+0

是什麼STATICMETHOD辦?初始化bean? – 2014-12-04 14:18:42

+0

爲了讓spring自動調用它,它必須屬於某個spring bean。從配置中調用它沒有意義。 – 2014-12-04 14:18:47

+0

靜態方法初始化myClass的實例 – LucaA 2014-12-04 14:47:45

回答

15
  1. 當靜態方法創建MyClass的實例你一個做這樣的

配置

<bean id="myBean" class="MyClass" factory-method="staticMethod"> 
    <!-- invoke here --> 
</bean> 

代碼

public static MyClass staticMethod() { 
     //create and Configure a new Instance 
} 
  • 如果你想方法僅要對豆實例春天叫不能做這種方式。
  • 配置

    <bean id="myBean" class="MyClass" init-method="init"> 
        <!-- invoke here --> 
    </bean> 
    

    代碼

    public static void staticMethod() { 
         //create and Configure a new Instance 
    } 
    
    public void init() { 
        staticMethod(); 
    } 
    
    +2

    不知道爲什麼這個答案被低估了......它比提案表決答案更準確地回答了這個問題。 – 2015-03-30 13:11:30

    +0

    這是正確的路要走。 +1 – Stefan 2015-10-21 08:47:12

    0

    嘗試是這樣的:

    <!-- call static method --> 
    <bean id="test" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
        <property name="targetClass" value="MyClass" /> 
        <property name="targetMethod" value="staticMethod" /> 
        <property name="arguments"> 
         <list> 
          <value>anArgument</value> 
         </list> 
        </property> 
    </bean> 
    

    刪除參數因爲你可能不需要它們。

    https://gist.github.com/bulain/1139874

    我需要調用一個靜態方法服用。上面的代碼工作正常。

    這可能也有用:How to make spring inject value into a static field

    0

    如果您正在使用Spring配置可以添加下面的方法到您的@Configuration類註釋:

    @Bean 
    public MethodInvokingFactoryBean methodInvokingFactoryBean() { 
        MethodInvokingFactoryBean methodInvokingFactoryBean = new MethodInvokingFactoryBean(); 
        methodInvokingFactoryBean.setStaticMethod("MyClass.staticMethod"); 
    
        return methodInvokingFactoryBean; 
    }