使用spring autowiring从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中是不

我有下面的接口及其实现类

Demo.java DemoImpl.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
  }

}