Устранение неполадок, связанных с использованием Spring свойств внедрения аннотаций, чтобы они были нулевыми

Spring

Я недавно стажировался в интернет-компании и столкнулся с необходимостью самостоятельно разработать sdk. Опираясь на свой предыдущий проектный опыт, я сначала создал проект Maven, затем представил зависимости Spring, а затем начал сумасшедший вывод.Когда я закончил писать установку и запустить демонстрационный тест, сумасшедший NPE (NullPointerException) был перегружен.Моя последняя строка защиты.

Далее я дам вам представление о том, что я сделал не так, и воспроизведу сцену того времени. Надеюсь, вы сможете черпать из него вдохновение. Эммм, на самом деле, в общем, не паникуйте, когда сталкиваетесь с проблемами.

Проверьте конфигурацию Spring

Когда вы обнаружите, что значение свойства в бизнес-компоненте равно нулю после внедрения через @Autowired или @Resource, я думаю, что ваша первая реакция невероятна (PS: Я, Боже 🐎 Призрак? С моим кодом проблем нет, должны быть другие причины). В этой ситуации, не паникуйте, перед лицом WeChat, лучший способ страха обслуживания клиентов состоит в том, чтобы преодолеть страх, Олли даст это.

На самом деле, никто не хочет, чтобы такая проблема случилась.Раз она возникла, то я предлагаю вам проверить вашу конфигурацию Spring, прежде чем думать о том, как убежать.В конце концов, если есть даже проблема с конфигурацией, то Spring - это фея.Правильный способ помочь нам завершить работу по сборке Бина.

Конкретные моменты для проверки следующие:

  1. над вашим компонентомБыли ли добавлены соответствующие аннотации. Например: @Controller, @Service, @Repository, @Component и т. д. (PS: Что, без настройки и без аннотаций, что вы хотите?)
  2. Убедитесь, что указан правильный путь к конфигурации сканера контекстного сканирования. То есть, может ли ваш сканер пакетов сканировать ваши компоненты аннотаций. (Если вы являетесь пользователем SpringBoot, проверьте, находится ли ваш пакет в том же каталоге, что и основная программа входа, и проверьте правильность пути, настроенного @ComponentScan)

С помощью вышеуказанных проверок мы должны сначала убедиться, что наши компоненты могут быть доставлены в контейнер Spring для унифицированного управления.

Проверьте способ создания экземпляра

Это тоже распространенная ошибка многих новичков.Я ввел все внутренние свойства.Почему я создаю новый объект и значения свойств в нем все нулевые?Это совсем не радует. Эта проблема возникает в основном из-за неправильного способа получения объекта. Мы знаем, что Spring — это bean-контейнер, а контейнер отвечает за инициализацию объекта и внедрение зависимостей. Когда мы хотим получить экземпляр компонента из него, мы должны получить его из контейнера Spring. Например: new ClassPathXmlApplicationContext("classpth:applicationContext.xml").getBean(String beanName); Или мы должны полагаться на аннотации, и Spring поможет нам внедрить зависимости. И если мы создаем новый экземпляр класса, мы обходим процесс внедрения зависимостей контейнера, поэтому может случиться так, что мы не сможем получить правильные атрибуты. (Твои вещи сделаны не чужим трудом, а ты идешь на чужие фабрики и говоришь, что им не хватает только двух, а тебя, братец, могут забить до смерти.)

Проверьте место инъекции

Когда арендодатель пишет код, первой сценой, где инъекция пуста, является добавление аннотации @Autowired к статическому свойству. Почесывание моих ушей и щек в то время еще свежо в моей памяти, но, успокоившись и хорошенько обдумав это, я смог увидеть, что произошло. Spring помогает нам автоматически вводить свойства после помощи в создании экземпляра Bean. Статический атрибут указывает, что атрибут принадлежит классу, а не экземпляру. Другими словами, когда мы хотим внедрить значения в статические свойства, объект еще не создан. Следовательно, должна быть ситуация, когда впрыск пуст.

Проблемы из-за порядка инициализации бина

Эта ситуация является реальной возможностью в бизнесе, и об этом нелегко думать. Сценарий, с которым сталкивается арендодатель, заключается в реализации фильтра, в котором необходимо внедрить компоненты бизнес-уровня для реализации некоторой логики фильтрации. После написания кода я обнаружил, что ServerBean всегда был пуст, и я проверил все возможные проблемы в трех вышеперечисленных методах и не решил их. Немного погуглив, я был ошеломлен. Получается, что веб-контейнер запускается в определенном порядке, а именно: Listener --> Filter --> Servlet. Наш компонент службы создается с опорой на компонент контроллера сервлета, поэтому при создании экземпляра фильтра зависимость не может быть внедрена, поскольку экземпляр сервлета не был инициализирован.

В общем, когда в наших проектах возникают подобные проблемы, не нужно слишком нервничать. Просто успокойтесь и хорошенько подумайте над тем, чему вы научились, чтобы получить желаемую обратную связь. Надеюсь, что смогу вам помочь.