中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決Spring boot無法注入service的問題

發布時間:2021-10-09 13:38:20 來源:億速云 閱讀:1462 作者:iii 欄目:開發技術

本篇內容主要講解“如何解決Spring boot無法注入service的問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何解決Spring boot無法注入service的問題”吧!

目錄
  • Spring boot 無法注入service

  • @Autowired注入無法實例化service

    • 問題場景

    • 問題解讀

    • 解決方案

    • @PostConstruct 描述

Spring boot 無法注入service

SpringBoot項目的Bean裝配默認規則是根據Application類所在的包位置從上往下掃描!

“Application類”是指SpringBoot項目入口類。

這個類的位置很關鍵:

如果Application類所在的包為:com.boot.app,則只會掃描com.boot.app包及其所有子包,如果service或dao所在包不在com.boot.app及其子包下,則不會被掃描!

即,把Application類放到dao、service所在包的上級,com.boot.Application

知道這一點非常關鍵,大多數情況下bean無法注入進來都是這個原因引起的。

@Autowired注入無法實例化service

問題場景

springboot整合netty時,netty的處理類無法實例化service

問題解讀

經過查閱資料,netty的bean對象默認不交由spring管理

解決方案

@Component//1.添加注解
public class NettyServerHandler extends ChannelInboundHandlerAdapter {
    private static Log log = LogFactory.getLog(NettyServerHandler.class);
    @Autowired
    private RedisUtils redisUtils;
    //2.聲明本類
    private static NettyServerHandler nettyServerHandler;
    //3.聲明構造方案
    public NettyServerHandler(){}
    //4.添加注解,在項目初始化時執行這個方法
    @PostConstruct
    public void init() {
        nettyServerHandler = this;
        nettyServerHandler.redisUtils = this.redisUtils;
    }
=====================================
經過以上4步驟的處理
for (Map dto : variants){
    String key = dto.get("key").toString();                   
     nettyServerHandler.redisUtils.hmset(dto.get("key").toString(),
dto, 100000);
 }
//nettyServerHandler.redisUtils.hmset()  通過這種方式調用redisUtils就可以了

@PostConstruct 描述

@PostConstruct

從Java EE5規范開始,Servlet增加了兩個影響Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct。這兩個注解被用來修飾一個非靜態的void()方法.而且這個方法不能有拋出異常聲明。 @PostContruct是spring框架的注解,在方法上加該注解會在項目啟動的時候執行該方法,也可以理解為在spring容器初始化的時候執行該方法。

@PostConstruct在項目中的用處

@PostConstruct注解的方法在項目啟動的時候執行這個方法,也可以理解為在spring容器啟動的時候執行,可加載項目中常規數據。

spring中Constructor、@Autowired、@PostConstruct的順序

要將對象b注入到對象a,那么首先就必須得生成對象b與對象a,才能執行注入。所以,如果一個類a中有個成員變量b被@Autowired注解,那么@Autowired注入是發生在a的構造方法執行完之后的。

如果想在生成對象時候完成某些初始化操作,而偏偏這些初始化操作又依賴于依賴注入,那么就無法在構造函數中實現。為此,可以使用@PostConstruct注解一個方法來完成初始化,@PostConstruct注解的方法將會在依賴注入完成后被自動調用。

Constructor >> @Autowired >> @PostConstruct

到此,相信大家對“如何解決Spring boot無法注入service的問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黎城县| 通辽市| 都江堰市| 沁水县| 南川市| 吉水县| 华坪县| 封开县| 余干县| 北安市| 双鸭山市| 连南| 平顶山市| 偏关县| 壤塘县| 都昌县| 昭通市| 东乌珠穆沁旗| 渭源县| 金乡县| 长治县| 广宁县| 贵港市| 广南县| 瑞丽市| 山丹县| 伊吾县| 曲沃县| 宁城县| 凉城县| 黑山县| 民丰县| 永宁县| 玉溪市| 德化县| 东丰县| 西吉县| 博兴县| 客服| 雷波县| 阿鲁科尔沁旗|