使用spring自动装配从java中的静态类调用非静态方法?

时间:2013-11-13 06:25:36

标签: java spring java-ee

我有以下界面及其实现类。

Demo.java

public interface Demo{

 void showDemo();

}

DemoImpl.java

@Service
public class DemoImpl implements Demo{

  public void showDemo(){

       //To Do

    }

}

现在我有一个静态方法的类,它将在内部调用showDemo(),如下所示。

DemoStatic.java

@Component
public class DemoStatic{

 @Autowired
 private Demo demo;



     public static void callShowDemo(){

       demo.showDemo(); //calling non static method from static method

       }

}

这里我从静态方法调用非静态方法。我的设计是否正确?或者我需要改变我的设计?请建议我。

谢谢!

4 个答案:

答案 0 :(得分:4)

你可以这样做

@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
  }

}

答案 1 :(得分:2)

没有你的设计不正确。

private Demo demo;

必须是

private static Demo demo;

你不能在静态方法中使用非静态成员

答案 2 :(得分:0)

以上代码根本不会编译。您正在尝试从静态方法引用非静态引用,这在Java中是不允许的。

请参阅此stackoverflow链接以便更好地理解。

进行以下更改:

public static Demo demo;

答案 3 :(得分:0)

当你调用DemoStatic.callShowDemo()时,演示可能不是instand