繁体   English   中英

无法调用,因为“this.redisService”是 null

[英]Cannot invoke because "this.redisService" is null

我尝试使用 Redis 来设置股票价值。

@SpringBootTest
public class RedisDemoTest{

    @Resource
    private RedisService redisService;

    @Test
    public void stockTest() {
        String value  = redisService.setValue("stock:19",10L).getValue("stock:19");
        System.out.println(value);
    }
}

这是我的 RedisService 代码

我尝试了@Resource 和@Autowired


@Service
public class RedisService {

    @Resource
    private JedisPool jedisPool;

    public RedisService setValue(String key, Long value){
        Jedis client = jedisPool.getResource();
        client.set(key,value.toString());
        client.close();
        return this;
    }

    public String getValue(String key) {
        Jedis client = jedisPool.getResource();
        String value = client.get(key);
        client.close();
        return value;
    }

它显示了 1 次使用 setValue 方法,但是我有一个 java.lang.NullPointerException:Cannot invoke "service.RedisService.setValue(String, java.lang.Long)" 因为 "this.redisService" 是 null

我希望打印出设定值 10。

测试代码中的 NullPointerExecption 通常存在 DI 不当的问题。 确保您的 RedisService 已正确注入 RedisDemoTest class。

例如@Resource 的target 是基于Field 和Setter 方法的,所以你需要为setter 方法构造一个构造函数,否则会报错。

我个人推荐使用@Autowired,或者@Inject,因为@Resource is deprecated since Java 9 (jdk1.9)

这个链接对我帮助很大: https://www.baeldung.com/spring-annotations-resource-inject-autowire

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM