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».
@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
Аннотируйте переменные, методы и конструкторы членов класса для завершения автоматической сборки.
Семантически определяется как идентификация конкретного целевого компонента по его уникальному имени, где объявленный тип не зависит от процесса сопоставления.
В среде 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-компонент не найден, он возвращается к примитивному типу для поиска, а если найден, он внедряется.