使用spring autowiring从java中的静态类调用非静态方法?
我有下面的接口及其实现类 Demo.java DemoImpl.java 现在我有一个带有静态方法的类,它将在内部调用使用spring autowiring从java中的静态类调用非静态方法?,java,spring,jakarta-ee,Java,Spring,Jakarta Ee,我有下面的接口及其实现类 Demo.java DemoImpl.java 现在我有一个带有静态方法的类,它将在内部调用showDemo(),如下所示 DemoStatic.java 这里我从静态方法调用非静态方法。我的设计正确吗?还是我需要改变我的设计?请推荐我 谢谢 不,您的设计不正确 private Demo demo; 一定是 private static Demo demo; 您不能在静态方法中使用非静态成员,上面的代码根本不会编译。您试图从静态方法引用非静态引用,这在Java中是不
showDemo()
,如下所示
DemoStatic.java
这里我从静态方法调用非静态方法。我的设计正确吗?还是我需要改变我的设计?请推荐我
谢谢 不,您的设计不正确
private Demo demo;
一定是
private static Demo demo;
您不能在静态方法中使用非静态成员,上面的代码根本不会编译。您试图从静态方法引用非静态引用,这在Java中是不允许的 请参阅此链接以更好地理解 进行以下更改:
public static Demo demo;
你可以这样做
@Component
public class DemoStatic {
private static Demo demo;
@Autowired
public void setDemo(Demo d) {
demo = d;
}
public static void callShowDemo(){
demo.showDemo(); //calling static method from static method
}
}
调用DemoStatic.callShowDemo()时,演示可能没有实例化您不能从静态方法调用非静态方法。它不会编译。当然,你可以,但是你必须指定调用非静态方法的对象。在这种情况下,方法调用实际上是可以的;问题是对非静态变量
demo
的引用。可以有多个DemoStatic
实例,每个实例都有自己的demo
变量。您只需插入bean并在需要的地方调用showDemo()
,不需要static就可以自动生成静态字段@SilviuBurcea@SilviuBurcea:我在Springs方面没有太多的专业知识,所以不能对此发表评论。Doltan,如果我让Demo变量为静态的,那么会有任何问题吗?谢谢不,不会有问题的。但是元素是静态的,你应该知道静态意味着什么。语句应该是“你不能在静态方法中使用非静态成员”
private static Demo demo;
public static Demo demo;
@Component
public class DemoStatic {
private static Demo demo;
@Autowired
public void setDemo(Demo d) {
demo = d;
}
public static void callShowDemo(){
demo.showDemo(); //calling static method from static method
}
}