您好,登錄后才能下訂單哦!
springboot prototype出現(xiàn)設(shè)置多例無效的解決方法?很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
大多數(shù)人會直接這樣寫:
@Bean @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) public TestBean getTestBean() { return new TestBean(); }
ConfigurableBeanFactory.SCOPE_PROTOTYPE的值就是prototype
但是發(fā)現(xiàn)Autowire的時(shí)候,每一個(gè)請求用的還是同一個(gè)單例對象,這是因?yàn)闆]設(shè)置多例的代理模式的問題,改成如下配置就可以了:
@Bean @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS) public TestBean getTestBean() { return new TestBean(); }
補(bǔ)充知識:Spring注解@Scope("prototype")
今天發(fā)現(xiàn)一個(gè)問題:頁面查出來的記錄,其它業(yè)務(wù)對其進(jìn)行修改以后,再查詢發(fā)現(xiàn)修改之前的記錄仍然還在,后來發(fā)現(xiàn)是Action沒有加@Scope("prototype")注解的原因。
Spring默認(rèn)scope是單例模式,這樣只會創(chuàng)建一個(gè)Action對象,每次訪問都是同一個(gè)Action對象,數(shù)據(jù)不安全。
一個(gè)注冊的例子,如果沒加上這個(gè)注解,注冊完成后,下一個(gè)請求再注冊一次,Action里會保留上一次注冊的信息。
struts2是要求每次訪問都對應(yīng)不同的Action,scope="prototype"可以保證當(dāng)有請求的時(shí)候都創(chuàng)建一個(gè)Action對象。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。