Почему мы не можем авторизовать переменную статического экземпляра в Spring bean. Я знаю, что есть другой способ добиться этого, но просто хочу знать, почему мы не делаем это ниже.
например.
@Autowired
public static Test test;
Почему мы не можем авторизовать переменную статического экземпляра в Spring bean. Я знаю, что есть другой способ добиться этого, но просто хочу знать, почему мы не делаем это ниже.
например.
@Autowired
public static Test test;
Потому что использование статических полей поощряет использование статических методов. А статические методы - зло. Основной целью инъекции зависимостей является предоставление контейнеру объектов для вас и их проводка. Кроме того, он упрощает тестирование.
Как только вы начнете использовать статические методы, вам больше не нужно создавать экземпляр объекта, а тестирование намного сложнее. Также вы не можете создавать несколько экземпляров данного класса, каждый из которых имеет различную зависимость, которая вводится (потому что поле неявно разделяется и создает глобальное состояние, а также зло).
Потому что, когда загрузчик классов загружает статические значения, контекст Spring еще не загружен. Таким образом, загрузчик классов не будет правильно вводить статический класс в bean и будет терпеть неудачу.
Согласно концепции ООП, это будет плохой дизайн, если статические переменные будут автоуведомлены.
Статическая переменная не является свойством Object, но является свойством класса. Spring автоматическая проводка выполняется на объектах, и это делает дизайн чистым, на мой взгляд. Вы можете развернуть объект с автономным подключением bean как одиночный, и добиться того же, что и его статический.
С помощью этого решения вы можете авторизовать статические поля в spring.
@Component
public class TestClass {
private static Test test;
@Autowired
public void setTest(Test test) {
TestClass.test = test;
}
}