用model快耿、service和controller實(shí)現(xiàn)了從數(shù)據(jù)查詢數(shù)據(jù)的功能后罐农,想要在普通線程類里面調(diào)用service的方法過程中就遇到一系列的問題。下面挨個(gè)做些筆記幸缕,以防下次遇到群发。
1.普通類里面調(diào)用service
網(wǎng)上搜資料 ?查到一種可行的方法,如下:
http://blog.csdn.net/u011385445/article/details/49305519
總結(jié)出來就是要先建立一個(gè)工具類SpringUtil,這個(gè)工具類實(shí)現(xiàn)了接口ApplicationContextAware 发乔,然后在代碼里寫上application的get set方法熟妓,方便我們?nèi)カ@取我們想要的bean。 ? ? ? 具體的代碼 請(qǐng)參考上面博客內(nèi)容栏尚。
2.使用上面的方法是出現(xiàn)的問題
在使用過程中一直在報(bào)application為null的錯(cuò)誤? 經(jīng)過反復(fù)考慮 測(cè)試 起愈。發(fā)現(xiàn)原因,是因?yàn)槲业捻?xiàng)目入口類實(shí)現(xiàn)了 InitializingBean接口译仗,然后將調(diào)用線程類的語(yǔ)句寫在了afterPropertiesSet()方法里面抬虽。而InitializingBean接口為bean提供了初始化方法的方式,它只包括afterPropertiesSet方法纵菌,凡是繼承該接口的類阐污,在初始化bean的時(shí)候會(huì)執(zhí)行該方法。所以意味著在application還沒有初始化的時(shí)候产艾,已經(jīng)被調(diào)用了 所以導(dǎo)致一直報(bào)空指針異常疤剑。
那對(duì)于這樣的問題該怎么解決呢?
3.解決執(zhí)行順序的問題
在項(xiàng)目入口里面闷堡,在afterPropertiesSet()方法前面注入service隘膘,然后將此service作為參數(shù),傳到線程類里面杠览,再次執(zhí)行程序的時(shí)候發(fā)現(xiàn)一切都正常了弯菊!
4.直覺告訴我還有更好的方法 ?可以解決這個(gè)問題 ,留著以后慢慢發(fā)現(xiàn)踱阿!