Подтвердить что ты не робот

Почему мы не можем авторизовать статические поля в spring

Почему мы не можем авторизовать переменную статического экземпляра в Spring bean. Я знаю, что есть другой способ добиться этого, но просто хочу знать, почему мы не делаем это ниже.

например.

@Autowired
public static Test test;
4b9b3361

Ответ 1

Потому что использование статических полей поощряет использование статических методов. А статические методы - зло. Основной целью инъекции зависимостей является предоставление контейнеру объектов для вас и их проводка. Кроме того, он упрощает тестирование.

Как только вы начнете использовать статические методы, вам больше не нужно создавать экземпляр объекта, а тестирование намного сложнее. Также вы не можете создавать несколько экземпляров данного класса, каждый из которых имеет различную зависимость, которая вводится (потому что поле неявно разделяется и создает глобальное состояние, а также зло).

Ответ 2

Потому что, когда загрузчик классов загружает статические значения, контекст Spring еще не загружен. Таким образом, загрузчик классов не будет правильно вводить статический класс в bean и будет терпеть неудачу.

Ответ 3

Согласно концепции ООП, это будет плохой дизайн, если статические переменные будут автоуведомлены.

Статическая переменная не является свойством Object, но является свойством класса. Spring автоматическая проводка выполняется на объектах, и это делает дизайн чистым, на мой взгляд. Вы можете развернуть объект с автономным подключением bean как одиночный, и добиться того же, что и его статический.

Ответ 4

С помощью этого решения вы можете авторизовать статические поля в spring.

@Component
public class TestClass {

    private static Test test;

    @Autowired
    public void setTest(Test test) {
        TestClass.test = test;
    }
}