依赖注入和静态方法

时间:2018-09-18 23:52:24

标签: java dependency-injection static-methods

我想知道如何使静态方法与依赖注入一起工作。
例如:

public class Util {
    Main main;

    public Util(Main main) { this.main = main }

    public static void showMessage() {
        System.out.println("message = " + main.messageMethod());
    }
} 

这是我想要做的,但是如果我这样从其他类(如Util.showMessage();)中调用方法时,它告诉我main为null。
我正在研究如何正确地执行此操作,因为对该类上的每个静态方法的DI都会有点烦人。

1 个答案:

答案 0 :(得分:0)

您需要将Main传递给静态方法:

public static void showMessage(final Main main) {
    System.out.println("message = " + main.messageMethod());
}

编写实用程序类的最佳实践:

  1. 实用程序类/方法必须是无状态的。实用程序类不应具有成员。实用程序方法应接受所有必需的变量作为参数。可以从并发环境中的多个线程调用实用程序类。可变的成员变量使类在线程并发环境中不安全,并产生讨厌的错误
  2. 实用程序方法不应实例化,也不应注入。它们应具有私有构造函数。
  3. 实用程序类应该是最终的(不可扩展)。

在将这些规则应用于实用程序类后,它将看起来像:

public final class Util {

    private Util();

    public static void showMessage(final Main main) {
        System.out.println("message = " + main.messageMethod());
    }
}

此类是最终的(无法扩展),具有私有构造函数(无法实例化或注入),无状态(无成员,如果方法showMessage不会改变主变量的状态,则是线程安全的)。