«Эта статья участвовала в мероприятии Haowen Convocation Order, щелкните, чтобы просмотреть:Двойные заявки на внутреннюю и внешнюю стороны, призовой фонд в 20 000 юаней ждет вас, чтобы бросить вызов!"
Считается, что с сообщением об ошибке на приведенном выше рисунке сталкивалось большинство программистов.Странно то, что хотя код и сообщает об ошибке, это никак не влияет на нормальное выполнение программы, то есть, хотя компилятор IDEA сообщает об ошибке, программа может выполняться нормально, в чем причина этого?
Анализ ошибок
Причина ошибки в первую очередь из-за мощного механизма сигнализации IDEA.@Autowired — это аннотация Spring, означающая, что определенный класс динамически внедряется в текущий класс, как показано на следующем рисунке:@Autowired вводится в соответствии с типом по умолчанию, и объект инъекции (внедрения) не может быть NULL Значение по умолчанию показано на следующем рисунке:а такжеПричина, по которой IDEA сообщает об ошибке, заключается в следующем: @Autowired — это аннотация Spring, а внедренный объект Mapper использует аннотацию @Mapper, но @Mapper — это аннотация MyBaits, IDEA может быть хорошо совместима и распознавать аннотации Spring, но не аннотацию MyBatis. хорошо распознается, поэтому при использовании аннотации @Autowired IDEA не может обнаружить, что объект, аннотируемый @Mapper, не является NULL, поэтому он сообщит об ошибке.
Это основная причина, по которой использование аннотации Spring @Repository/@Component... не сообщает об ошибке, но использование аннотации @Mapper сообщает об ошибке, как показано на следующем рисунке:
Решение 1. Выключите механизм сигнализации
Отключите механизм сигнализации внедрения IDEA, чтобы избежать ошибок.Этапы реализации следующие.
1. Откройте IDEA и найдите опцию настройки параметров «Предпочтения...», как показано ниже:2. Выберите «Редактор» -> «Проверки» -> «Spring» -> «Spring Core» -> «Код» -> «Autowiring for bean class», чтобы изменить уровень «Ошибка» на уровень «Waring», как показано. ниже показано:После завершения настройки нажмите кнопку ОК, чтобы просмотреть класс Mapper, ранее сообщивший об ошибке.Эффект отображения выглядит следующим образом:Сообщение об ошибке исчезло.
Решение 2. Добавьте аннотации Spring
Добавление аннотаций Spring в класс Mapper также может решить проблему отчетов об ошибках IDEA, таких как аннотации, такие как @Repository или @Component, как показано на следующем рисунке:Или используйте аннотацию @Repository, как показано ниже:Посмотрите предыдущее сообщение об ошибке:Ошибка исчезла.
Решение 3. Разрешить введенному объекту значение NULL
Установка для объекта Mapper, который разрешает внедрение, значения NULL также позволяет избежать ошибок в отчетах IDEA, просто установите @Autowired(required=false), как показано на следующем рисунке:(Объект userMapper2 не сообщит об ошибке)
- @Autowired(required=true): указывает, что bean-компонент должен существовать, когда используется аннотация @Autowired, в противном случае внедрение завершается неудачно, значение по умолчанию.
- @Autowired(required=false): указывает, что текущий bean-компонент для внедрения игнорируется.Если есть прямое внедрение, оно будет пропущено, и об ошибке не будет сообщено.
Исходный код реализации значения по умолчанию @Autowired:
Решение 4. Аннотируйте с помощью @Resource
Замена аннотации @Autowired на аннотацию @Resource также может избежать ошибок.Эффект сравнения выглядит следующим образом:В текущем сценарии основное различие между аннотацией @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» и получайте его в режиме реального времени.