Java 使用SpringBootDataRedis模板获取空指针错误

Java 使用SpringBootDataRedis模板获取空指针错误,java,spring,spring-boot,Java,Spring,Spring Boot,配置: @配置 @启用缓存 公共类RedisConfig扩展了CachingConfigurerSupport{ @Bean(name=“template”) 公共RedisTemplate模板(RedisConnectionFactory工厂){ RedisTemplate=新RedisTemplate(); 模板.setConnectionFactory(工厂); Jackson2JsonRedisSerializer jacksonSeial=新的Jackson2JsonRedisSeri

配置:

@配置
@启用缓存
公共类RedisConfig扩展了CachingConfigurerSupport{
@Bean(name=“template”)
公共RedisTemplate模板(RedisConnectionFactory工厂){
RedisTemplate=新RedisTemplate();
模板.setConnectionFactory(工厂);
Jackson2JsonRedisSerializer jacksonSeial=新的Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om=新的ObjectMapper();
setVisibility(PropertyAccessor.ALL、JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jacksonSeial.setObjectMapper(om);
StringRedisSerializer stringSerial=新的StringRedisSerializer();
模板。setKeySerializer(stringSerial);
template.setValueSerializer(jacksonSeial);
模板.setHashKeySerializer(stringSerial);
setHashValueSerializer(jacksonSeial);
template.afterPropertieSet();
返回模板;
}
}
使用:

@Autowired
私有模板;
还有这个

@Autowired
    private RedisTemplate<String, Object> template;
ValueOperations=template.opsForValue();
总是会出错, 堆栈跟踪是:

  ValueOperations<String, Object> operations = template.opsForValue();
java.lang.NullPointerException:null
在cn.com.agree.afa.jcomponent.CacheOperationImpl.(CacheOperationImpl.java:15)~[afa-interface-1.0.0.jar:na]
在tc.bank.base.B_MemaryHandle.getCache(B_MemaryHandle.java:36)~[afa-component-1.0.0.jar:na]
在tc.bank.base.B_MemaryHandle.B_PutGlobalCache(B_MemaryHandle.java:64)~[afa-component-1.0.0.jar:na]
在tc.bank.base.B_LoadData.B_LoadErrorCodeConfig(B_LoadData.java:146)[afa-component-1.0.0.jar:na]
在cn.com.agree.afa.trade.AimServer.BASE\u startup.execute(BASE\u startup.java:53)[main/:na]
在cn.com.agree.trade.TradeManager.execute(TradeManager.java:43)[afa-interface-1.0.0.jar:na]
在cn.com.agree.afa.App.run(App.java:71)[main/:na]
在org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:804)[spring-boot-2.4.0.jar:2.4.0]
位于org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:788)[spring-boot-2.4.0.jar:2.4.0]
在org.springframework.boot.SpringApplication.run(SpringApplication.java:333)[spring-boot-2.4.0.jar:2.4.0]
在org.springframework.boot.SpringApplication.run(SpringApplication.java:1309)[spring-boot-2.4.0.jar:2.4.0]
在org.springframework.boot.SpringApplication.run(SpringApplication.java:1298)[spring-boot-2.4.0.jar:2.4.0]
在cn.com.agree.afa.App.main(App.java:40)[main/:na]
我只想用SpringBootDateRedis做一些CRUD操作,比如模板。
请帮助我

在构造函数完成之前,无法进行字段注入。将模板改为构造函数参数(通常避免字段注入)。

在构造函数完成之前,字段注入不能发生。将模板改为构造函数参数(通常避免字段注入)。

方法调用'opsForValue'将产生'NullPointerException'方法调用'opsForValue'将产生'NullPointerException'我几乎无法理解你,坦白说,这是我第一次使用spring相关的东西,你能准确地告诉我如何纠正这个问题吗?@Django47将模板作为类构造函数的参数,就像当初没有Spring时那样。(并养成从不在字段上使用
@Autowired
的习惯,因为这会导致类似的问题;只需在构造函数中传递所需的任何内容即可。)我已将代码更改为
私有配置ApplicationContext ctx=new AnnotationConfigApplicationContext(RedisConfig.class)@SuppressWarnings(“未选中”)私有RedisTemplate RedisTemplate=(RedisTemplate)ctx.getBean(“RedisTemplate”);private ValueOperations=redisTemplate.opsForValue()并出现新错误
未指定CacheResolver,未找到CacheManager类型的bean。注册CacheManager bean或从配置中删除@EnableCaching注释。
删除@EnableCaching后,程序最终运行无误!但我仍然需要知道代码是如何使用@Value(${spring…})以公制方式获取yml或属性的……我几乎无法理解你,坦白说,这是我第一次使用spring相关的东西,你能准确地告诉我如何纠正这个问题吗?@Django47将模板作为类构造函数的参数,就像当初没有Spring时那样。(并养成从不在字段上使用
@Autowired
的习惯,因为这会导致类似的问题;只需在构造函数中传递所需的任何内容即可。)我已将代码更改为
私有配置ApplicationContext ctx=new AnnotationConfigApplicationContext(RedisConfig.class)@SuppressWarnings(“未选中”)私有RedisTemplate RedisTemplate=(RedisTemplate)ctx.getBean(“RedisTemplate”);private ValueOperations=redisTemplate.opsForValue()并出现新错误
未指定CacheResolver,未找到CacheManager类型的bean。注册CacheManager bean或从配置中删除@EnableCaching注释。
删除@EnableCaching后,程序最终运行无误!但是我仍然需要知道代码是如何使用@Value(${spring…})以公制方式获取yml或属性的,这对我来说是有效的。。。
  ValueOperations<String, Object> operations = template.opsForValue();
java.lang.NullPointerException: null
    at cn.com.agree.afa.jcomponent.CacheOperationImpl.<init>(CacheOperationImpl.java:15) ~[afa-interface-1.0.0.jar:na]
    at tc.bank.base.B_MemaryHandle.getCache(B_MemaryHandle.java:36) ~[afa-component-1.0.0.jar:na]
    at tc.bank.base.B_MemaryHandle.B_PutGlobalCache(B_MemaryHandle.java:64) ~[afa-component-1.0.0.jar:na]
    at tc.bank.base.B_LoadData.B_LoadErrorCodeConfig(B_LoadData.java:146) [afa-component-1.0.0.jar:na]
    at cn.com.agree.afa.trade.AimServer.BASE_startup.execute(BASE_startup.java:53) [main/:na]
    at cn.com.agree.trade.TradeManager.execute(TradeManager.java:43) [afa-interface-1.0.0.jar:na]
    at cn.com.agree.afa.App.run(App.java:71) [main/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:804) [spring-boot-2.4.0.jar:2.4.0]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:788) [spring-boot-2.4.0.jar:2.4.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:333) [spring-boot-2.4.0.jar:2.4.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) [spring-boot-2.4.0.jar:2.4.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) [spring-boot-2.4.0.jar:2.4.0]
    at cn.com.agree.afa.App.main(App.java:40) [main/:na]