springboot prototype設(shè)置多例不起作用的解決操作
大多數(shù)人會(huì)直接這樣寫(xiě):
@Bean@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)public TestBean getTestBean() { return new TestBean();}
ConfigurableBeanFactory.SCOPE_PROTOTYPE的值就是prototype
但是發(fā)現(xiàn)Autowire的時(shí)候,每一個(gè)請(qǐng)求用的還是同一個(gè)單例對(duì)象,這是因?yàn)闆](méi)設(shè)置多例的代理模式的問(wèn)題,改成如下配置就可以了:
@Bean@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS)public TestBean getTestBean() { return new TestBean();}
補(bǔ)充知識(shí):Spring注解@Scope('prototype')
今天發(fā)現(xiàn)一個(gè)問(wèn)題:頁(yè)面查出來(lái)的記錄,其它業(yè)務(wù)對(duì)其進(jìn)行修改以后,再查詢(xún)發(fā)現(xiàn)修改之前的記錄仍然還在,后來(lái)發(fā)現(xiàn)是Action沒(méi)有加@Scope('prototype')注解的原因。
Spring默認(rèn)scope是單例模式,這樣只會(huì)創(chuàng)建一個(gè)Action對(duì)象,每次訪問(wèn)都是同一個(gè)Action對(duì)象,數(shù)據(jù)不安全。
一個(gè)注冊(cè)的例子,如果沒(méi)加上這個(gè)注解,注冊(cè)完成后,下一個(gè)請(qǐng)求再注冊(cè)一次,Action里會(huì)保留上一次注冊(cè)的信息。
struts2是要求每次訪問(wèn)都對(duì)應(yīng)不同的Action,scope='prototype'可以保證當(dāng)有請(qǐng)求的時(shí)候都創(chuàng)建一個(gè)Action對(duì)象。
以上這篇springboot prototype設(shè)置多例不起作用的解決操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. css進(jìn)階學(xué)習(xí) 選擇符2. 使用css實(shí)現(xiàn)全兼容tooltip提示框3. XML入門(mén)的常見(jiàn)問(wèn)題(一)4. 低版本IE正常運(yùn)行HTML5+CSS3網(wǎng)站的3種解決方案5. 概述IE和SQL2k開(kāi)發(fā)一個(gè)XML聊天程序6. html小技巧之td,div標(biāo)簽里內(nèi)容不換行7. 告別AJAX實(shí)現(xiàn)無(wú)刷新提交表單8. HTML DOM setInterval和clearInterval方法案例詳解9. 詳解CSS偽元素的妙用單標(biāo)簽之美10. XML入門(mén)精解之結(jié)構(gòu)與語(yǔ)法
