以静态方法使用@Autowired服务

时间:2019-03-29 11:28:24

标签: java spring static autowired

我正在尝试在具有静态方法的类中自动装配多个服务(大约10-15),并且遇到了关于in this post的关于使用@Autowired构造函数的解决方案。我们也可以对多个类使用构造函数@Autowired方法吗?

例如,假设我有两个类Foo1Foo2。我可以对两个类都使用单个构造函数吗?

@Component
public class Boo {

    private static Foo1 foo1;
    private static Foo2 foo2;

    @Autowired
    public Boo(Foo1 foo1, Foo2 foo2) {
        Boo.foo1 = foo1;
        Boo.foo2 = foo2;
    }

    public static void randomMethod() {
         foo1.doStuff();
         foo2.doSomeOtherStuff();
    }
}

或者还有其他方法可以实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

Spring + static是一个非常糟糕的主意。

我建议使randomMethod()而不是static,然后在先前需要调用Boo方法的任何地方注入static。例如更改此:

class A {
    public void run() {
        Boo.randomMethod();
    }
}

对此:

@Component
public class A {
    private final Boo boo;

    @Autowired
    public A(Boo boo) {
        this.boo = boo;
    }

    public void run() {
        boo.randomMethod();
    }
}

这种构造是春季设计的方式,我建议您使用它。