Использование сервисов @Autowired в статическом методе - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь автоматически связать несколько служб (около 10-15) в классе, имеющем статические методы, и наткнулся на решение, упомянутое в этом посте об использовании конструктора @Autowired.Можем ли мы использовать конструктор @Autowired для нескольких классов?

Например, предположим, у меня есть два класса Foo1 и Foo2.Могу ли я использовать один конструктор для обоих классов, например

@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 голосов
/ 29 марта 2019

Весна + 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();
    }
}

Эта конструкция предназначена для пружин, и я предлагаю вам использовать ее.

...