Java 为什么@Autowired没有';在静态法中不能工作
我找到了许多解决这个问题的方法,并选择了下面的一种 但是它仍然会得到Java 为什么@Autowired没有';在静态法中不能工作,java,spring,nullpointerexception,Java,Spring,Nullpointerexception,我找到了许多解决这个问题的方法,并选择了下面的一种 但是它仍然会得到NullpointerException,怎么了 一门课 @Component public class A { private static Foo foo; @Autowired public void setFoo(Foo foo) { A.foo = foo; } public static someFunction() { foo.doSom
NullpointerException
,怎么了
一门课
@Component
public class A {
private static Foo foo;
@Autowired
public void setFoo(Foo foo) {
A.foo = foo;
}
public static someFunction() {
foo.doSomething();
}
}
@Service
public class B {
public void someFunction() {
A.someFunction();
}
}
B级
@Component
public class A {
private static Foo foo;
@Autowired
public void setFoo(Foo foo) {
A.foo = foo;
}
public static someFunction() {
foo.doSomething();
}
}
@Service
public class B {
public void someFunction() {
A.someFunction();
}
}
不能在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>
如果您需要更多帮助,请告诉我。自动连线是关于实例化对象的,您不实例化所述对象。你为什么想要这个?你把Foo变成了bean、组件或服务了吗?请共享与Foo相关的代码。Foo是一个已经存在的服务,我想使用它的一些方法。您的场景是什么,您需要静态方法吗?通常,在spring上下文中只有一个。在一个类中自动连接一个bean将与在另一个类中自动连接的bean相同。除了你定义的原型。嘿,伙计们,我终于解决了这个问题。这段代码没有问题,问题是spring组件扫描没有扫描类的文件夹。在我编辑了spring配置之后,现在一切都好了。有没有不带xml的选项?@user7294900我已经更新了答案,如果你认为它对你有用,也接受它。我已经解决了这个问题,谢谢你的建议。@Roil.Li你也接受答案吗?那太好了。