Анализ ошибок @Autowired и 4 решения!

Spring Boot задняя часть Spring
Анализ ошибок @Autowired и 4 решения!

«Эта статья участвовала в мероприятии Haowen Convocation Order, щелкните, чтобы просмотреть:Двойные заявки на внутреннюю и внешнюю стороны, призовой фонд в 20 000 юаней ждет вас, чтобы бросить вызов!"

autowired-logo.pngСчитается, что с сообщением об ошибке на приведенном выше рисунке сталкивалось большинство программистов.Странно то, что хотя код и сообщает об ошибке, это никак не влияет на нормальное выполнение программы, то есть, хотя компилятор IDEA сообщает об ошибке, программа может выполняться нормально, в чем причина этого? ​

Анализ ошибок

Причина ошибки в первую очередь из-за мощного механизма сигнализации IDEA.@Autowired — это аннотация Spring, означающая, что определенный класс динамически внедряется в текущий класс, как показано на следующем рисунке:image.png@Autowired вводится в соответствии с типом по умолчанию, и объект инъекции (внедрения) не может быть NULL Значение по умолчанию показано на следующем рисунке:image.pngа такжеПричина, по которой IDEA сообщает об ошибке, заключается в следующем: @Autowired — это аннотация Spring, а внедренный объект Mapper использует аннотацию @Mapper, но @Mapper — это аннотация MyBaits, IDEA может быть хорошо совместима и распознавать аннотации Spring, но не аннотацию MyBatis. хорошо распознается, поэтому при использовании аннотации @Autowired IDEA не может обнаружить, что объект, аннотируемый @Mapper, не является NULL, поэтому он сообщит об ошибке. image.png

Это основная причина, по которой использование аннотации Spring @Repository/@Component... не сообщает об ошибке, но использование аннотации @Mapper сообщает об ошибке, как показано на следующем рисунке:image.png image.png image.png

Решение 1. Выключите механизм сигнализации

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

1. Откройте IDEA и найдите опцию настройки параметров «Предпочтения...», как показано ниже:image.png2. Выберите «Редактор» -> «Проверки» -> «Spring» -> «Spring Core» -> «Код» -> «Autowiring for bean class», чтобы изменить уровень «Ошибка» на уровень «Waring», как показано. ниже показано:image.pngПосле завершения настройки нажмите кнопку ОК, чтобы просмотреть класс Mapper, ранее сообщивший об ошибке.Эффект отображения выглядит следующим образом:image.pngСообщение об ошибке исчезло. ​

Решение 2. Добавьте аннотации Spring

Добавление аннотаций Spring в класс Mapper также может решить проблему отчетов об ошибках IDEA, таких как аннотации, такие как @Repository или @Component, как показано на следующем рисунке:image.pngИли используйте аннотацию @Repository, как показано ниже:image.pngПосмотрите предыдущее сообщение об ошибке:image.pngОшибка исчезла.

Решение 3. Разрешить введенному объекту значение NULL

Установка для объекта Mapper, который разрешает внедрение, значения NULL также позволяет избежать ошибок в отчетах IDEA, просто установите @Autowired(required=false), как показано на следующем рисунке:image.png(Объект userMapper2 не сообщит об ошибке)

  • @Autowired(required=true): указывает, что bean-компонент должен существовать, когда используется аннотация @Autowired, в противном случае внедрение завершается неудачно, значение по умолчанию.
  • @Autowired(required=false): указывает, что текущий bean-компонент для внедрения игнорируется.Если есть прямое внедрение, оно будет пропущено, и об ошибке не будет сообщено.

Исходный код реализации значения по умолчанию @Autowired:image.png

Решение 4. Аннотируйте с помощью @Resource

Замена аннотации @Autowired на аннотацию @Resource также может избежать ошибок.Эффект сравнения выглядит следующим образом:image.pngВ текущем сценарии основное различие между аннотацией @Resource и аннотацией @Autowired заключается в том, что @Resource — это аннотация, предоставляемая самой Java, а @Autowired — аннотация, предоставляемая Spring.Значение @Autowired по умолчанию обязательно = true, поэтому a Для объектов, отличных от NULL, IDEA сообщит об ошибке, если не сможет определить, что объект имеет значение NULL, но @Resource не имеет этого требования.

Суммировать

Причина, по которой сообщается об ошибке при импорте объекта Mapper с использованием аннотации @Autowired, заключается в том, что @Autowired по умолчанию необходимо внедрить объект, отличный от NULL, а класс, измененный @Mapper, является аннотацией MyBatis, которую IDEA не может распознать как не NULL., поэтому будет сообщено об ошибке. Конечно, для этого есть много решений, для решения этой проблемы рекомендуется использовать аннотацию @Resource вместо @Autowired. ​

Чтобы узнать больше о весенних галантерейных товарах, обратите внимание на публичный аккаунт «Java Chinese Community» и получайте его в режиме реального времени.