? ?一谈竿、 平時(shí)用多線程的情況不是很多团驱,最近有個(gè)同事問我為什么代碼里報(bào)空指針異常了,跟蹤代碼發(fā)現(xiàn)異常出現(xiàn)在獲取spring注入bean中g(shù)et具體屬性的時(shí)候報(bào)錯(cuò)空凸。
? ? 當(dāng)時(shí)是一個(gè)懵逼的狀態(tài)嚎花,后才查閱資料才想起來,因?yàn)閟pring為了考慮安全性問題呀洲,在多線程情況下紊选,不支持直接使用 @Resouce 注解方式進(jìn)行直接的bean注入,那么也就是說道逗,如果在多線程調(diào)用該注入實(shí)例化的變量時(shí)兵罢,將會(huì)報(bào)NullPointerException。
解決辦法:
主線程可以獲取到spring注入的bean
構(gòu)造函數(shù)返回獲取值
? ?二滓窍、 junit出現(xiàn)異常的原因是:
????因?yàn)閖unit一般會(huì)走最小化的方式卖词,而非每次都要將整個(gè)框架的東西載入,從而減少加載時(shí)間吏夯。當(dāng)然此蜈,如果確實(shí)需要,這個(gè)問題噪生,其實(shí)目前在高版本的junit中裆赵,已經(jīng)不存在了,通過加載?SpringJUnit4ClassRunner跺嗽,即可進(jìn)行注入值战授。
解決方法:
通過getBean的方式獲取需要的bean,因?yàn)閮H僅是單元測(cè)試桨嫁,加載資源稍微多些也沒有關(guān)系植兰。
解決方案2:
使用高版本的junit進(jìn)行測(cè)試