为什么@Autowired在静态方法中不起作用

时间:2019-11-06 06:56:45

标签: java spring nullpointerexception

我找到了解决此问题的许多方法,然后选择下面的方法。

但是它仍然显示NullpointerException,怎么了?

A班

@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 个答案:

答案 0 :(得分:3)

您不能在Spring中自动连接静态属性,因为静态字段在类加载期间实例化,因为它们是类的属性,而在Spring初始化bean之后自动连接属性起作用。 尽管您可以在Spring中使用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;
}

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