聊聊SpringBoot中組件無法被注入的問題
SpringBoot中組件無法被注入
1、描述問題
在SpringBoot中,無法通過注解@AutoWired來自動綁定實(shí)體bean或者組件component。

2、解決問題
首先檢查自己的是否在實(shí)體類上加上了@Component這樣的注解,@ComponentScan可以掃描的有@Service、@Repository、@Componnet、@Controller、@RestController等注解的類。當(dāng)項(xiàng)目啟動的時(shí)候,說明在Spring容器中已經(jīng)存在了這些組件,放我們請求綁定的時(shí)候,如@Autowired或者@Resourece時(shí),通過IOC,會自動為我們添加一個(gè)對象到我們的當(dāng)前類中。
但當(dāng)我們這一切都做好了,卻發(fā)現(xiàn)依舊不能通過@AutoWired進(jìn)行綁定時(shí),我們需要考慮需要綁定的對象是否存在一個(gè)無參構(gòu)造函數(shù)(默認(rèn)有,但是會被其他有參構(gòu)造函數(shù)覆蓋掉),下面的注解是我使用Lombok的注解。@Data包含了屬性的Set/Get的方法,還有包括toString()、Equals()等。@NoArgsConstructor表示構(gòu)造無參函數(shù)。@AllArgsConstructor表示構(gòu)造全參函數(shù)。
有了無參構(gòu)造函數(shù),基本就可以進(jìn)行綁定,并且調(diào)用該對象的方法了。

3、總結(jié)問題
Spring通過DI(依賴注入)來實(shí)現(xiàn)IOC(控制反轉(zhuǎn))
常用的注入方式Spring容器有三種方式:
①構(gòu)造方法注入,②Set方法注入,③接口注入。
方法比較多,放我們熟悉一種的時(shí)候,不妨去學(xué)習(xí)其他的方法,三者的注入方式都有一定的適用場景,這也是知識從點(diǎn)到面的過程。
解決在@Component注入為null
package com.gblfy;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
/**
* @author gblfy
* @ClassNme BaseCommon
*/
@Component//關(guān)鍵點(diǎn) 1 為spring組件
public class BaseCommon {
//添加所需ConfigParam的私有成員
@Resource
private ConfigParam configParam;
// 關(guān)鍵點(diǎn)2 靜態(tài)初使化 一個(gè)工具類 這樣是為了在spring初使化之前
private static BaseCommon baseCommon;
//關(guān)鍵 3 通過@PostConstruct 和 @PreDestroy 方法 實(shí)現(xiàn)初始化和銷毀bean之前進(jìn)行的操作
@PostConstruct
public void init() {
baseCommon = this;
// 初使化時(shí)將已靜態(tài)化的configParam實(shí)例化
baseCommon.configParam = this.configParam;
}
/**
* @param serviceName
* @throws Exception
*/
@Transactional
public void logWebService(String serviceName) throws Exception {
//關(guān)鍵點(diǎn) 4 調(diào)用時(shí)請使用 此類靜態(tài)變量 .對象 例如:baseCommon.configParam
String params = baseCommon.configParam.getParams(serviceName);
System.out.println("返回參數(shù)" + params);
}
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Security賬戶與密碼驗(yàn)證實(shí)現(xiàn)過程
這篇文章主要介紹了Spring Security賬戶與密碼驗(yàn)證實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-03-03
Spring注解 TX聲明式事務(wù)實(shí)現(xiàn)過程解析
這篇文章主要介紹了Spring注解 - TX 聲明式事務(wù)實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
java捕獲AOP級別的異常并將其傳遞到Controller層
如何在一個(gè)現(xiàn)代的Java應(yīng)用中,捕獲AOP(面向切面編程)級別的異常,并將這些異常傳遞到Controller層進(jìn)行合適的處理,異常處理在構(gòu)建可靠的應(yīng)用程序中起著關(guān)鍵作用,而AOP則可以幫助我們更好地管理和組織代碼,我們將深入研究如何結(jié)合AOP和異常處理來構(gòu)建健壯的應(yīng)用2023-09-09
java程序中指定某個(gè)瀏覽器打開的實(shí)現(xiàn)方法
最近工作中遇到一個(gè)需求,是要利用java打開指定瀏覽器,整理后發(fā)現(xiàn)有四種解決的方法,所以想著分享出來,下面這篇文章主要給大家介紹了java程序中指定某個(gè)瀏覽器打開的實(shí)現(xiàn)方法,,需要的朋友可以參考下。2017-03-03
javaWeb項(xiàng)目部署到阿里云服務(wù)Linux系統(tǒng)的詳細(xì)步驟
這篇文章主要介紹了javaWeb項(xiàng)目部署到阿里云服務(wù)Linux系統(tǒng),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
MyBatis-Plus數(shù)據(jù)權(quán)限插件的簡單使用
在MyBatis-Plus中,通過DataPermissionInterceptor插件實(shí)現(xiàn)數(shù)據(jù)權(quán)限控制,首先需要?jiǎng)?chuàng)建自定義注解和處理類,利用JSQLParser庫動態(tài)修改SQL,實(shí)現(xiàn)按角色權(quán)限過濾數(shù)據(jù),配置類中注冊攔截器,確保只有授權(quán)用戶能訪問指定數(shù)據(jù),感興趣的可以了解一下2024-10-10
Java實(shí)現(xiàn)任務(wù)超時(shí)處理方法
任務(wù)超時(shí)處理是比較常見的需求,Java中對超時(shí)任務(wù)的處理有兩種方式,在文中給大家詳細(xì)介紹,本文重點(diǎn)給大家介紹Java實(shí)現(xiàn)任務(wù)超時(shí)處理方法,需要的朋友可以參考下2019-06-06
Java設(shè)計(jì)模式中的設(shè)計(jì)原則之合成復(fù)用原則詳解
這篇文章主要介紹了Java設(shè)計(jì)模式中的設(shè)計(jì)原則之合成復(fù)用原則詳解,原則是盡量使用合成/聚合的方式,而不是使用繼承聚合關(guān)系表示的是整體和部分的關(guān)系,整體與部分可以分開,可以理解為成員變量和當(dāng)前類的關(guān)系就是聚合關(guān)系,需要的朋友可以參考下2023-11-11
SpringBoot打包發(fā)布到linux上(centos 7)的步驟
這篇文章主要介紹了SpringBoot打包發(fā)布到linux上(centos 7)的步驟,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-12-12

