Как элегантно решить исключение внедрения StringRedisTemplate в SpringBoot
Как элегантно решить исключение внедрения StringRedisTemplate в SpringBoot

Сообщение об ошибке

Язык кода:javascript
копировать
Bean named 'redisTemplate' is expected to be of type 'org.springframework.data.redis.core.StringRedisTemplate' but was actually of type 'org.springframework.data.redis.core.RedisTemplate'

Просто переведи это:Это называетсяredisTemplateизBeanдолжно быть“org.springframework.data.redis.core.StringRedisTemplate”тип,Но на самом деле это тип «org.springframework.data.redis.core.redisTemplate».

причина
Язык кода:javascript
копировать
@Configuration
public class MvcConfig implements WebMvcConfigurer {

    @Resource
    private StringRedisTemplate redisTemplate;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor(redisTemplate))
                .excludePathPatterns(
                        "/user/code",
                        "/user/login",
                        "/blog/hot",
                        "/shop/**",
                        "/shop-type/**",
                        "/voucher/**"
                );
    }
}

инъекцияBeanиз时候采用из@resourceаннотация,И по умолчанию он принимает имя поля,Вводить по имени

решение
  • Воля@ResourceИзменить на@AutoWired
  • private StringRedisTemplate redisTemplate;Изменить наprivate StringRedisTemplate stringRedisTemplate;
расширять@Resourceи@AutoWired
1. Определение
  • @Autowired

Аннотируйте переменные, методы и конструкторы членов класса для завершения автоматической сборки.

  • @Resource

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

2. Разница

В среде Spring, если нам нужно внедрить другие зависимые объекты на уровень службы, мы обычно используем аннотации @Autowired или @Resource, но они разные. Например, @Autowired тесно связан с средой Spring. другая структура, @Autowired не имеет никакого эффекта. @Resource предоставляется JSR-250, который является стандартом Java и поддерживается большинством платформ.

(1) Содержит различные атрибуты

@Autowired содержит только один параметр: обязательный, указывающий, включать ли автоматическое внедрение. Значение по умолчанию — true. @Resource содержит семь параметров, два наиболее важных параметра: имя и тип.

(2) @Autowired по умолчанию использует автоматическую сборку по типу, а @Resource — автоматическую сборку по имени.

@Autowired Если вы хотите использовать byName, вам нужно использовать @Qualifier вместе. Если @Resource указывает имя, он будет автоматически собран по имени. Если указан тип, он будет автоматически собран по типу.

(3) Аннотации применяются в разных местах.

@Autowired можно использовать для: конструкторов, методов, параметров, переменных-членов и аннотаций, а @Resource можно использовать для: классов, переменных-членов и методов.

(4) Различные источники

@Autowired — это аннотация, определенная Spring, а @Resource — это аннотация, определенная JSR-250. Таким образом, @Autowired можно использовать только в среде Spring, а @Resource — в других платформах.

(5) Различная последовательность сборки

Последовательность сборки @Autowired следующая:

@Autowired по умолчанию сначала выполняет сопоставление по типу. Если обнаружено несколько компонентов, они будут сопоставлены по имени. Если их больше, будет сообщено об исключении.

Последовательность сборки @Resource следующая:

Если имя и тип указаны одновременно, процесс выглядит следующим образом:

Если указано имя, процесс выглядит следующим образом:

Если указано только имя аннотации @Resource, найдите в элементе компонента компонент с атрибутом равного имени на основе имени после имени.

Если указан тип, процесс выглядит следующим образом:

Если указан только атрибут type аннотации @Resource, в контексте сборки будет найден единственный bean-компонент с соответствующим типом. Если bean-компонент не найден или найдено более одного, будет выдано исключение.

Если ни имя, ни тип не указаны, процесс выглядит следующим образом:

Если не указан ни атрибут имени, ни атрибут типа, поиск будет выполняться автоматически по имени. Если соответствующий bean-компонент не найден, он возвращается к примитивному типу для поиска, а если найден, он внедряется.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода