Почему мы не можем авторизовать статические поля в spring
Почему мы не можем авторизовать переменную статического экземпляра в Spring bean. Я знаю, что есть другой способ добиться этого, но просто хочу знать, почему мы не делаем это ниже.
например.
@Autowired
public static Test test;
Ответ 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;
}
}