java静态工具类注入service出现NullPointerException异常处理
目录
controller
层调用service
时,只需要使用@Autowired
注解即可,例如如下代码我们经常看到:@RestController@RequestMapping("business")public class BizResourceController {@Autowiredprivate BusinessService businessService; @RequestMapping(path = "/queryYearList", method = RequestMethod.POST)public List queryYearList(@RequestParam("cityCode") String cityCode) {return businessService.queryYearList(cityCode); }}
以上代码的含义就是通过在
controller
中注入业务层类(BusinessService
)调用业务层方法queryYearList
。但是如果我们要在我们自己封装的Utils工具类中或者非controller
普通类中使用@Autowired
注解注入Service
或者Mapper
接口,直接注入是报错的,因为Utils
使用了静态的方法,我们是无法直接使用非静态接口的,当我们遇到这样的问题,我们就要想办法解决了。例如:public class RedisHelper {private static final Logger logger = LoggerFactory.getLogger(RedisHelper.class); @Autowiredprivate static StringRedisTemplate redisTemplate; /*** scan 实现** @param pattern表达式* @param consumer 对迭代到的key进行操作*/public static void scan(String pattern, Consumerconsumer) {redisTemplate.execute((RedisConnection connection) -> {try (Cursor cursor = connection.scan(ScanOptions.scanOptions().count(Long.MAX_VALUE).match(pattern).build())) {cursor.forEachRemaining(consumer); return null; } catch (IOException e) {e.printStackTrace(); throw new RuntimeException(e); }}); }/*** 获取符合条件的key** @param pattern 表达式* @return*/public static List keys(String pattern) {List keys = new ArrayList<>(); scan(pattern, item -> {//符合条件的keyString key = new String(item, StandardCharsets.UTF_8); keys.add(key); }); return keys; }public static void delete(List listKey) {try {logger.info("需要删除key:" + listKey); Long delete1 = redisTemplate.delete(listKey); logger.info("清除redis-key结果:{}",delete1); } catch (Exception e) {e.printStackTrace(); }}}
如上代码在
redis
工具类中想要注入StringRedisTemplate
但是我们使用的时候会发现,这个StringRedisTemplate
对象时null。所以当我们需要有类似需求进行注入的时候要调整注入方式和写法,如下代码:@Componentpublic class RedisHelper {private static final Logger logger = LoggerFactory.getLogger(RedisHelper.class); private static StringRedisTemplate redisTemplate; @Autowiredpublic void setRedisTemplate(StringRedisTemplate redisTemplate) {RedisHelper.redisTemplate = redisTemplate; }/*** scan 实现** @param pattern表达式* @param consumer 对迭代到的key进行操作*/public static void scan(String pattern, Consumerconsumer) {redisTemplate.execute((RedisConnection connection) -> {try (Cursor cursor = connection.scan(ScanOptions.scanOptions().count(Long.MAX_VALUE).match(pattern).build())) {cursor.forEachRemaining(consumer); return null; } catch (IOException e) {e.printStackTrace(); throw new RuntimeException(e); }}); }/*** 获取符合条件的key** @param pattern 表达式* @return*/public static List keys(String pattern) {List keys = new ArrayList<>(); scan(pattern, item -> {//符合条件的keyString key = new String(item, StandardCharsets.UTF_8); keys.add(key); }); return keys; }public static void delete(List listKey) {try {logger.info("需要删除key:" + listKey); Long delete1 = redisTemplate.delete(listKey); logger.info("清除redis-key结果:{}",delete1); } catch (Exception e) {e.printStackTrace(); }}}
其修改的核心是:
文章图片
首先加
@Component
注解目的是让spring
托管,另外注入StringRedisTemplate
我们采用set方式进行注入即可。【java静态工具类注入service出现NullPointerException异常处理】到此这篇关于java静态工具类注入service出现
NullPointerException
异常处理的文章就介绍到这了,更多相关java静态类注入service
出现NullPointerException
处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 事件代理
- 孩子不是实现父母欲望的工具——林哈夫
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 最有效的时间管理工具(赢效率手册和总结笔记)
- 工具|后天就是七夕节,你准备好了吗(送上几个七夕代码,展示你技能的时候到了!)