3 votes

Pourquoi @Autowired ne fonctionne pas dans une méthode statique

J'ai trouvé plusieurs solutions à ce problème, et j'ai choisi celle qui suit.

Mais il y a toujours NullpointerException Qu'est-ce qui ne va pas ?

Une classe

@Component
public class A {

    private static Foo foo;

    @Autowired
    public void setFoo(Foo foo) {
        A.foo = foo;
    }

    public static someFunction() {
        foo.doSomething();
    }
}

Classe B

@Service
public class B {

    public void someFunction() {
        A.someFunction();
    }
}

3voto

Hades Points 1051

Vous ne pouvez pas câbler automatiquement les propriétés statiques dans Spring, les champs statiques sont instanciés pendant le chargement de la classe car ils sont les propriétés de la classe alors que les attributs câblés automatiquement fonctionnent après que Spring initialise les beans. Bien que vous puissiez utiliser MethodInvokingFactoryBean à Spring pour obtenir ce que vous vouliez. Un exemple serait en XML comme ci-dessous

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="staticMethod" value="foo.bar.Class.setTheProperty"/>
    <property name="arguments">
        <list>
            <ref bean="theProperty"/>
        </list>
   </property>
</bean>

Editer :- sans XML dans votre @Configuration classe faire

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

    return methodInvokingFactoryBean;
}

faites-moi savoir si vous avez besoin de plus d'aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X