欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【Java】SpringCloud中使用set方法报错空指针

【Java】SpringCloud中使用set方法报错空指针

2025/2/10 22:58:43 来源:https://blog.csdn.net/wjjjjxxxx/article/details/142107243  浏览:    关键词:【Java】SpringCloud中使用set方法报错空指针

前言:今天在交流群中看见了一个空指针报错,想着哪里为空点过去看看为什么赋不上值就行,没想到啪啪打脸了,今天总结一下。

以下是他的RedisTempate注入和方法

可以看到,89行报错空指针。先分析一下,

①赋值没赋上吗?不对,因为84行已将将responseBodyString的值打印在控制台了,是有值的。

②那只能是redisTemlate这个方法有问题了,set赋值赋不进去。为什么呢? 

群里大佬说:“spring 注入static 对象会是个Null对象(根据name或者type实例化失败)”。

原来如此! 往上划看图一,他是这样注入的:

@Resource

private static RedisTempalte<String,Object> redisTemplate;

因为不知道spring注入static对象会是空对象,所以没考虑到这个方面。

总结:

        我们在使用注解注入set方法时,不可以加static,因为静态变量和类变量不是对象的属性,而是一个类的属性,静态方法是属于类的;而普通方法才是属于实体的对象,即new出来的对象。

参考:文章 

补充:

除了通过注解注入,我们也可以通过构造方法注入

package com.medical.member.test;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;/*** @author: 宁兴星* Date: 2024/9/10 20:18* Description:*/
@Controller
public class TestController {private final RedisTemplate<String, Object> redisTemplate; // 移除了 static 关键字// 构造函数注入@Autowiredpublic TestController(RedisTemplate<String, Object> redisTemplate) {this.redisTemplate = redisTemplate; // 将 redisTemplate 赋值给实例变量}@GetMapping("test/method")public void test() {redisTemplate.opsForValue().set("test", "这是我的测试数据");}
}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com