Could not autowire. There is more than one bean of ‘RedisTemplate‘ type原因

代码如下:

@RunWith(SpringRunner.class)
@SpringBootTest
class RedisdemoApplicationTests {
    
    
    @Autowired
    private RedisTemplate template;
    @Test
    public void a() {
    
    
        template.opsForValue().set("1","测试中文");
        System.out.println(template.opsForValue().get("1"));
    }
}

错误信息

Could not autowire. There is more than one bean of 'RedisTemplate' type.
Beans:
redisTemplate   (RedisAutoConfiguration.class) stringRedisTemplate   (RedisAutoConfiguration.class) 

错误原因

StringRedisTemplate 类是RedisTemplate 的子类,子类注入时会调用父类。事实上我们可以理解为子类也是一种特殊的父类。
对于@Autowired注解,它是先根据类型注入,由于存在两个RedisTemplate 类型,它不知道应该注入哪一个。然后根据名称注入,由于该对象名称为template,无法断定类型,所以报错。

解决方案

  • 1.将对象名改为redisTemplate使用@Autowired注解:@Autowired在根据类型无法判断时会根据名称进行注入。
  • 2.将对象名改为redisTemplate使用@Resource注解:@Resource会根据名称进行注入。
  • 3.不改对象名,使用@Resource(name = “redisTemplate”)指定名称注入。

猜你喜欢

转载自blog.csdn.net/weixin_44159662/article/details/112316333