Почему мы не можем автоматически подключить статическую переменную экземпляра в компоненте Spring. Я знаю, что есть другой способ добиться этого, но просто хочу знать, почему мы не можем сделать это описанным ниже способом.
например
@Autowired
public static Test test;
Ответы:
Поскольку использование статических полей поощряет использование статических методов. А статические методы - зло. Основная цель внедрения зависимостей - позволить контейнеру создавать объекты за вас и связывать их. Также это упрощает тестирование.
Как только вы начнете использовать статические методы, вам больше не нужно создавать экземпляр объекта, и тестирование станет намного сложнее. Также вы не можете создать несколько экземпляров данного класса, каждый со своей внедряемой зависимостью (потому что поле неявно разделяется и создает глобальное состояние - также зло).
источник
@BeforeClass
SpringJUnit4ClassRunner и использовать этот метод для доступа к bean-компонентам@Autowired
в тесте ... вы в принципе не можете. Что раздражает.Поскольку, когда загрузчик классов загружает статические значения, контекст Spring еще не обязательно загружается. Таким образом, загрузчик классов не будет правильно вводить статические поля в bean-компонент и завершится ошибкой.
источник
Согласно концепции ООП, если статические переменные подключены автоматически, это будет плохой дизайн.
Статическая переменная не является свойством объекта, но является свойством класса. Пружинная автоматическая разводка проводится на объектах, что, на мой взгляд, делает дизайн чистым. Вы можете развернуть объект автоматически подключенного компонента как одноэлементный и добиться того же результата, что и статический.
источник
С помощью этого решения вы можете автоматически подключать статические поля весной.
источник