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