web-dev-qa-db-fra.com

Invoquer une méthode statique à partir de spring config

Est-il possible d'appeler une méthode statique dans un fichier de configuration Spring?

public MyClass {

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

}
<bean id="myBean" class="MyClass">
   <!-- invoke here -->
</bean>
13
LucaA
  1. Lorsque la méthode statique crée une instance de MyClass, vous pouvez le faire comme ceci

config

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

code

public static MyClass staticMethod() {
       //create and Configure a new Instance
}
  1. Si vous voulez que la méthode ne soit appelée que sur l'instanciation de bean, le printemps ne peut pas le faire de cette façon.

config

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

code

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

public void init() {
     staticMethod();
}
18
Hank Lapidez

essaye ça

<bean id="b1" class="org.springframework.beans.factory.config.MethodInvokingBean">
    <property name="staticMethod" value="MyClass.staticMethod" />
</bean>

voir http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/config/MethodInvokingBean.html

13
Evgeniy Dorofeev

Essayez quelque chose comme ça:

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

Supprimez les arguments car vous n’en avez peut-être pas besoin.

Extrait de https://Gist.github.com/bulain/1139874

J'avais besoin d'appeler une méthode statique. Le code ci-dessus a bien fonctionné.

Cela peut aussi être utile: Comment faire en sorte que le ressort injecte la valeur dans un champ statique

1
jbarrameda

Si vous utilisez des annotations pour la configuration de ressort, vous pouvez ajouter la méthode suivante à votre classe @Configuration:

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

    return methodInvokingFactoryBean;
}
0
Cloud