Почему @Autowired не работает в статическом методе - PullRequest
3 голосов
/ 06 ноября 2019

Я нашел много решений этой проблемы и выбрал следующее.

Но он все равно получает NullpointerException, что не так?

Класс

@Component
public class A {

    private static Foo foo;

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

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

B Класс

@Service
public class B {

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

1 Ответ

3 голосов
/ 06 ноября 2019

Вы не можете автоматически связывать статические свойства в Spring, статические поля создаются во время загрузки класса, так как они являются свойствами класса, в то время как атрибуты с автоматической проводкой работают после того, как spring инициализирует bean-компоненты. Хотя вы можете использовать MethodInvokingFactoryBean весной, чтобы достичь того, чего вы хотели. пример может быть в XML, как показано ниже

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

Редактировать: - без XML внутри вашего @Configuration класса сделайте

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

    return methodInvokingFactoryBean;
}

дайте мне знать, если вам нужна дополнительная помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...