第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Servlet 獲取 spring管理的bean

Servlet 獲取 spring管理的bean

犯罪嫌疑人X 2019-03-06 18:18:24
項(xiàng)目里面想在servlet用spring注入的service等bean的時(shí)候,報(bào)空指針異常,網(wǎng)上的解釋?zhuān)浩鋵?shí)我們使用spring的目的就是為了讓spring為我們來(lái)提供一個(gè)已經(jīng)被注入好的一個(gè)實(shí)例。而servlet是不同的,servlet是有生命周期的,而這個(gè)并不歸屬spring管理,而是由web容器管理的。那么當(dāng)servlet剛剛創(chuàng)建的時(shí)候,spring可以為servlet注入,當(dāng)你訪(fǎng)問(wèn)的時(shí)候,由于servlet是單實(shí)例多線(xiàn)程的,所以,servlet信息被重置,剛剛被注入的對(duì)象又為null了。我有一些問(wèn)題,servlet是單實(shí)例的,但是如果我注入的bean是成員變量,那么即使是多次請(qǐng)求,這個(gè)bean 也是在堆內(nèi)存里面,為什么servlet信息會(huì)被重置呢?如果是spring mvc,為什么在controller里面可以直接調(diào)用其他spring 容器管理的bean。如果我在servlet里面調(diào)用service , service里面再調(diào)用spring注入的bean還會(huì)有空指針的問(wèn)題嗎?謝謝.
查看完整描述

1 回答

?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

正如你所說(shuō):Servlet是單實(shí)例的,容器中只有一個(gè)Servlet對(duì)象來(lái)處理所有的客戶(hù)端請(qǐng)求, 因此:

1.Servlet里面可以存放一些全局的或不變的數(shù)據(jù),但是不應(yīng)該存放和用戶(hù)相關(guān)的數(shù)據(jù), 否則由于多個(gè)用戶(hù)會(huì)在不同的線(xiàn)程中同時(shí)操作這些數(shù)據(jù),就會(huì)導(dǎo)致混亂。

2.mvc里面也有一個(gè)Servlet,但是這個(gè)servlet在每次請(qǐng)求的時(shí)候,會(huì)new一個(gè)Controller, 這樣在Servlet的一次請(qǐng)求處理中,數(shù)據(jù)是相互沒(méi)有干擾的。另外,一般spring管理的bean,會(huì)存放在ThreadLocal這樣的對(duì)象中,在controller處理完畢后,會(huì)清理ThreadLocal。

3.道理同上,如果單獨(dú)寫(xiě), 應(yīng)該new一個(gè)service,并且最后需要在處理完畢后清理ThreadLocal,否則會(huì)把殘留數(shù)據(jù)留給下一次數(shù)據(jù)處理, 導(dǎo)致數(shù)據(jù)不可預(yù)期。


查看完整回答
反對(duì) 回復(fù) 2019-04-21
  • 1 回答
  • 0 關(guān)注
  • 304 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)