欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java靜態(tài)工具類注入service出現(xiàn)NullPointerException異常處理

 更新時間:2021年09月27日 11:09:56   作者:我是大明哥  
如果我們要在我們自己封裝的Utils工具類中或者非controller普通類中使用@Autowired注解注入Service或者Mapper接口,直接注入是報錯的,因Utils用了靜態(tài)方法,我們無法直接用非靜態(tài)接口的,遇到這問題,我們要想法解決,下面小編就簡單介紹解決辦法,需要的朋友可參考下

一般我們在controller層調用service時,只需要使用@Autowired注解即可,例如如下代碼我們經??吹剑?/strong>

@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中注入業(yè)務層類(BusinessService)調用業(yè)務層方法queryYearList。但是如果我們要在我們自己封裝的Utils工具類中或者非controller普通類中使用@Autowired注解注入Service或者Mapper接口,直接注入是報錯的,因為Utils使用了靜態(tài)的方法,我們是無法直接使用非靜態(tài)接口的,當我們遇到這樣的問題,我們就要想辦法解決了。例如:

public class RedisHelper {
    private static final Logger logger = LoggerFactory.getLogger(RedisHelper.class);
    @Autowired
    private static StringRedisTemplate redisTemplate;

    /**
     * scan 實現(xiàn)
     *
     * @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但是我們使用的時候會發(fā)現(xiàn),這個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 實現(xiàn)
     *
     * @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靜態(tài)工具類注入service出現(xiàn)NullPointerException異常處理的文章就介紹到這了,更多相關java靜態(tài)類注入service出現(xiàn)NullPointerException處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java開發(fā)微信公眾號支付

    java開發(fā)微信公眾號支付

    這篇文章主要給大家結合微信支付接口開發(fā)的實踐,從獲取用戶授權到各主要接口的使用方法等方面介紹微信支付的關鍵點技術,有需要的小伙伴可以參考下
    2015-08-08
  • Linux中JDK安裝配置教程

    Linux中JDK安裝配置教程

    這篇文章主要為大家詳細介紹了Linux中JDK安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 解決springcloud中Feign導入依賴為unknow的情況

    解決springcloud中Feign導入依賴為unknow的情況

    這篇文章主要介紹了解決springcloud中Feign導入依賴為unknow的情況,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • springboot用thymeleaf模板的paginate分頁完整代碼

    springboot用thymeleaf模板的paginate分頁完整代碼

    本文根據(jù)一個簡單的user表為例,展示 springboot集成mybatis,再到前端分頁完整代碼,需要的朋友可以參考下
    2017-07-07
  • Java?中的異常處理機制詳情介紹

    Java?中的異常處理機制詳情介紹

    本篇文章主要介紹Java中的異常、如何處理函數(shù)拋出的異常、處理異常的原則、異常處理時,性能開銷大的地方,感興趣的小伙伴可以參考一下
    2022-09-09
  • Spring使用注解方式實現(xiàn)創(chuàng)建對象

    Spring使用注解方式實現(xiàn)創(chuàng)建對象

    這篇文章主要介紹了Spring使用注解方式實現(xiàn)創(chuàng)建對象,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-02-02
  • 在Java8與Java7中HashMap源碼實現(xiàn)的對比

    在Java8與Java7中HashMap源碼實現(xiàn)的對比

    這篇文章主要介紹了在Java8與Java7中HashMap源碼實現(xiàn)的對比,內容包括HashMap 的原理簡單介紹、結合源碼在Java7中是如何解決hash沖突的以及優(yōu)缺點,結合源碼以及在Java8中如何解決hash沖突,balance tree相關源碼介紹,需要的朋友可以參考借鑒。
    2017-01-01
  • SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權動態(tài)權限問題

    SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權動態(tài)權限問題

    這篇文章主要介紹了SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權-動態(tài)權限,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Java利用位運算實現(xiàn)加減乘除的方法詳解

    Java利用位運算實現(xiàn)加減乘除的方法詳解

    我們經常使用的加減乘除,我們所看到的只是表面的效果,那么加減乘除在底層究竟是怎么實現(xiàn)的?今天就讓我們一探究竟
    2022-08-08
  • SpringBoot中condition注解的使用方式

    SpringBoot中condition注解的使用方式

    這篇文章主要介紹了SpringBoot中condition注解的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評論