java - 为什么@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();
}
}
解决方案
您不能在 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;
}
如果您需要更多帮助,请告诉我。
推荐阅读
- outlook - 如果群组活动被删除,如何通知所有与会者?
- node.js - Sails 发生错误请求/400 错误时如何重定向页面?
- php - 当使用 laravel 工厂创建三个包时,如何将一个包的列值设置为 true?
- django - 为什么 django 不接受除“cut”之外的任何名称的自定义过滤器?
- postgresql - Postgres Recursive - 获取每个孩子的根 ID(并忽略不良数据)
- scala - 从常规类创建 Spark 数据帧
- kotlin - Kotlin 用于实现带注释的功能接口的简写
- fpga - 在 Xilinx Vivado 中映射大小大于 4MB 的 PCIe BAR 区域
- html - Edge - 音频标签部分响应 206
- c - C - inet_pton() 不产生网络字节顺序