




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第解決spring懶加載以及@PostConstruct結(jié)合的坑目錄spring懶加載及@PostConstruct的坑下面是一個初始化數(shù)據(jù)的組件遺留問題@PostConstruct注入不成功直接先說原因吧1.忽略ssm本身對注解是通過掃包才讓注解有效的2.忽略@Service的注解3.注意掃包區(qū)間4.@PostCoustruct注解用于
spring懶加載及@PostConstruct的坑
舉例說明:
下面是一個初始化數(shù)據(jù)的組件
@Component
publicclassInitData{
*初始化加載bean
@PostConstruct
publicvoidinit(){
MapString,Stringmap=newHashMapString,String
for(inti=0;ii++){
map.put(i+"",i+"");
//模擬加載一些別單例模式bean的數(shù)據(jù)初始化
ErrorMsgUtil1.getInstance().setMap(map);
ErrorMsgUtil2.getInstance().setMap(map);
好了,如果你開啟了spring的懶加載模式,而且InitData這個bean只是被掃描而沒有被注入,那么ErrorMsgUtil里的map永遠(yuǎn)是空的。
@PostConstruct實(shí)在bean初始化的時候被創(chuàng)建的,開啟了懶加載顯然如果InitData沒有被用到那么就一直不執(zhí)行了。
此坑已踩,小弟還是對spring理解不深,繼續(xù)學(xué)習(xí)。
ps:如何開啟spring的懶加載模式,在spring.xml中加上下面的代碼中最后一句即可
xmlversion="1.0"encoding="UTF-8"
beansxmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"
xmlns:context="/schema/context"
xmlns:mvc="/schema/mvc"xmlns:tx="/schema/tx"
xsi:schemaLocation="
/schema/beans
/schema/beans/spring-beans-3.0.xsd
/schema/context
/schema/context/spring-context-3.0.xsd
"default-lazy-init="true"
遺留問題@PostConstruct注入不成功
前兩天做了個純java代碼的rabbitMQ監(jiān)聽多個ip的客戶端功能,由于用的不是配置方式的listener方式—博文中有這一節(jié),無法自動啟動。就用@PostConstruct來項(xiàng)目啟動時運(yùn)行監(jiān)聽mq,但是老遇到調(diào)用業(yè)務(wù)邏輯層方法時,注入不成功導(dǎo)致空指針異常。今天排查了一下,發(fā)現(xiàn)主要問題是框架掃包忽略了。
直接先說原因吧
1.忽略ssm本身對注解是通過掃包才讓注解有效的
!--自動掃描該包,支持注解的層限制,把a(bǔ)pi這個controller層排除在外了。另外多個包中間用逗號或者分號隔開都可以。--
context:component-scanbase-package="com.**.service,com.**.action,com.**.common"
context:include-filtertype="annotation"expression="org.springframework.stereotype.Controller"/
context:exclude-filtertype="annotation"expression="org.springframework.stereotype.api"/
/context:component-scan
2.忽略@Service的注解
由于掃包是掃service層和action層(相當(dāng)于service層),common工具層。所以在api層(相當(dāng)于controller層)用@Service和不用注解都是錯誤的,都會導(dǎo)致注入失敗。
3.注意掃包區(qū)間
出了這個范圍@PostConstruct是無效的。應(yīng)用在啟動時是不會走帶有這個注解的方法的。
4.@PostCoustruct注解用于
在依賴關(guān)系注入完成之后需要執(zhí)行的方法上,以執(zhí)行任何初始化。此方法所在的類必須放入服務(wù)之前調(diào)用。也就是該注解的類上不能隨便注解:經(jīng)驗(yàn)總結(jié)是能用@Service注解,不能用@Controller注解,否則啟動不會走這個方法。這個類定位為服務(wù)層/業(yè)務(wù)層。而不是控制層(web層)
有了上面說的注意點(diǎn)。我重新在工具類包c(diǎn)ommon包中寫了個測試類。然后spring配置文件上掃包范圍增加了這個common包。代碼如下:mon.cache.CommonCacheMap.java
packagemon.cache;
importjavax.annotation.PostConstruct;
importjavax.annotation.Resource;
importorg.springframework.stereotype.Service;
importcom.zlf.bo.StaffBo;
importcom.zlf.service.IStaffService;
@Service("CommonCacheMap")
publicclassCommonCacheMap{
@Resource
privateIStaffServicestaffService;
@PostConstruct
publicvoidgetOneStaff(){
StaffBostaffBo=staffService.selectByPrimaryKey(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑設(shè)計院宣傳
- 新生兒體溫護(hù)理
- 輕奢風(fēng)設(shè)計提案
- 健康主題班會課件教學(xué)
- 失血性休克急救護(hù)理專家共識解讀
- 衛(wèi)生安全防護(hù)體系建設(shè)
- 現(xiàn)代服裝設(shè)計要素與發(fā)展趨勢
- 2025年EEA項(xiàng)目申請報告模板
- 2025年二級穩(wěn)壓裝置項(xiàng)目立項(xiàng)申請報告模板
- 2025年高品質(zhì)人造石英晶體項(xiàng)目申請報告模板
- 2025年河南省安陽市滑縣中考一?;瘜W(xué)試題(含答案)
- 江蘇省南通市南通第一中學(xué)2025屆高考英語試題(英語試題)預(yù)測押題密卷I卷(全國1卷)含解析
- 音樂情緒識別技術(shù)-深度研究
- 全國職業(yè)院校技能大賽高職組(商務(wù)數(shù)據(jù)分析賽項(xiàng))備賽試題庫(含答案)
- 《中華人民共和國職業(yè)分類大典》(2022年版)各行業(yè)職業(yè)表格統(tǒng)計版(含數(shù)字職業(yè))
- 數(shù)字孿生數(shù)據(jù)映射機(jī)制-深度研究
- 《藥學(xué)綜合知識與技能》課件-過敏性鼻炎的自我藥療與用藥指導(dǎo)
- 加溫毯預(yù)防術(shù)中低體溫
- 檢驗(yàn)科實(shí)驗(yàn)室生物安全風(fēng)險評估
- 石材維修合同范本(2025年)
- 【MOOC】全新版大學(xué)進(jìn)階英語綜合教程I-內(nèi)蒙古大學(xué) 中國大學(xué)慕課MOOC答案
評論
0/150
提交評論