2014-12-04 15 views
12

Czy można wywołać metodę statyczną w pliku konfiguracyjnym Spring?Wywołanie metody statycznej ze sprężynowej konfiguracji

public MyClass { 

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

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

Co staticmethod zrobić? zainicjować fasolę? –

+0

Aby sprężyna mogła go wywołać automatycznie, musi należeć do jakiejś fasoli sprężynowej. Nie ma sensu po prostu wywoływać go z konfiguracji. –

+0

Metoda statyczna inicjuje instancję myClass – LucaA

Odpowiedz

15
  1. Gdy metoda statyczna tworzy instancję MojaKlasa Ci zrobić to tak

config

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

kod

public static MyClass staticMethod() { 
     //create and Configure a new Instance 
} 
  1. Jeśli chcesz tylko metodę, która będzie wywoływana na fasoli konkretyzacji wiosną nie może zrobić to w ten sposób.

config

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

kod

public static void staticMethod() { 
     //create and Configure a new Instance 
} 

public void init() { 
    staticMethod(); 
} 
+2

Nie wiem, dlaczego ta odpowiedź została odrzucona w głosowaniu ... odpowiada ona bardziej dokładnie na pytanie, niż głosowana odpowiedź IMO. –

+0

To jest właściwa droga. +1 – Stefan

0

Spróbuj coś takiego:

<!-- 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> 

Usuń argumentem s, ponieważ możesz ich nie potrzebować.

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

ja potrzebuje do wywołania metody statyczne. Powyższy kod działał dobrze.

Może to być również przydatne: How to make spring inject value into a static field.

0

Jeśli używasz adnotacje dotyczące konfiguracji sprężyny można dodać następującą metodę w swojej klasie @Configuration:

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

    return methodInvokingFactoryBean; 
}