<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
一般我們在controller
層呼叫service
時,只需要使用@Autowired
註解即可,例如如下程式碼我們經常看到:
@RestController @RequestMapping("business") public class BizResourceController { @Autowired private BusinessService businessService; @RequestMapping(path = "/queryYearList", method = RequestMethod.POST) public List<String> 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); @Autowired private static StringRedisTemplate redisTemplate; /** * scan 實現 * * @param pattern 表示式 * @param consumer 對迭代到的key進行操作 */ public static void scan(String pattern, Consumer<byte[]> consumer) { redisTemplate.execute((RedisConnection connection) -> { try (Cursor<byte[]> 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<String> keys(String pattern) { List<String> keys = new ArrayList<>(); scan(pattern, item -> { //符合條件的key String key = new String(item, StandardCharsets.UTF_8); keys.add(key); }); return keys; } public static void delete(List<String> 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。所以當我們需要有類似需求進行注入的時候要調整注入方式和寫法,如下程式碼:
@Component public class RedisHelper { private static final Logger logger = LoggerFactory.getLogger(RedisHelper.class); private static StringRedisTemplate redisTemplate; @Autowired public void setRedisTemplate(StringRedisTemplate redisTemplate) { RedisHelper.redisTemplate = redisTemplate; } /** * scan 實現 * * @param pattern 表示式 * @param consumer 對迭代到的key進行操作 */ public static void scan(String pattern, Consumer<byte[]> consumer) { redisTemplate.execute((RedisConnection connection) -> { try (Cursor<byte[]> 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<String> keys(String pattern) { List<String> keys = new ArrayList<>(); scan(pattern, item -> { //符合條件的key String key = new String(item, StandardCharsets.UTF_8); keys.add(key); }); return keys; } public static void delete(List<String> 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
處理內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45