首页 > 解决方案 > 为什么@Autowired 在静态方法中不起作用

问题描述

我找到了许多解决此问题的方法,并选择了以下一个。

但它仍然得到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();
    }
}

标签: javaspringnullpointerexception

解决方案


您不能在 Spring 中自动连接静态属性,静态字段在类加载期间被实例化,因为它们是类的属性,而自动连接属性在 spring 初始化 bean 后工作。尽管您可以MethodInvokingFactoryBean在 Spring 中使用来实现您想要的。一些示例将在 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>

@Configuration编辑:- 在你的类中没有 XML做

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

    return methodInvokingFactoryBean;
}

如果您需要更多帮助,请告诉我。


推荐阅读