麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 網(wǎng)站 > WEB開(kāi)發(fā) > 正文

獲取Spring中bean對(duì)象或在Spring初始化完成之后使用Spring中bean對(duì)象

2024-04-27 15:15:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

        之前一直沒(méi)有做過(guò)服務(wù)端東西,現(xiàn)在有個(gè)需要,在服務(wù)端啟動(dòng)后,后臺(tái)一直輪詢查詢一個(gè)信息,若發(fā)現(xiàn)信息則提醒用戶,給用戶發(fā)送一個(gè)通知。

        因?yàn)橐郧皩?duì)服務(wù)端的涉及也就是在客戶端去調(diào)用服務(wù)端的Action,這樣服務(wù)端是被動(dòng)的去執(zhí)行某個(gè)方法,現(xiàn)在要在服務(wù)端主動(dòng)去執(zhí)行,剛開(kāi)始有一些懵,不斷在網(wǎng)上查找資料,嘗試,將自己的一些方法和遇到的坑記錄下來(lái)。

        首先我用的方法的是,新建一個(gè)類(lèi),繼承自HttpServt類(lèi),然后重寫(xiě)他的init()方法,在servlet類(lèi)執(zhí)行時(shí),會(huì)首先去執(zhí)行這個(gè)init()方法,我們只要將執(zhí)行的邏輯在init()方法中調(diào)用即可:

public class MyServlet extends HttpServlet {    /**     *      */    PRivate static final long serialVersionUID = 1L;    @Override    public void init() throws ServletException {        // TODO Auto-generated method stub        super.init();        System.out.println("Servlet服務(wù)已啟動(dòng),開(kāi)始輪詢>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");    }}

        要將Servlet設(shè)置為隨服務(wù)啟動(dòng)而啟動(dòng),還需要在web.xml中去配置:

<servlet>  <servlet-name>AlarmPollingServlet</servlet-name>  <servlet-class>action.AlarmPollingServlet</servlet-class>  <load-on-startup>1</load-on-startup></servlet>

        在applicationContext.xml中去配置bean:
<bean id="myServlet" class="action.MyServlet" scope="prototype">  <property name="queryInterface" ref="queryInterfaceImpl"></property></bean>        但是這樣會(huì)隨之出現(xiàn)一個(gè)問(wèn)題,因?yàn)槲沂窃谶@個(gè)servlet中調(diào)用了dao層的接口中的方法,這個(gè)接口對(duì)象是在Spring容器中初始化的,由于在Servlet啟動(dòng)的時(shí)候,Spring容器并不一定已經(jīng)初始化完畢了,所以,在調(diào)用接口方法時(shí),接口對(duì)象會(huì)報(bào)空指針異常。

        經(jīng)過(guò)查閱資料我了解到有幾種解決方法:        1、在applicationContext.xml中注入bean時(shí),在里面加上

init-method=" value "

        這個(gè)值,其中value值為將要執(zhí)行的方法,但是我在項(xiàng)目運(yùn)行時(shí),這種方法無(wú)效,因?qū)Ψ?wù)端內(nèi)容不熟悉,所以還沒(méi)有查出具體原因,若大家有了解詳細(xì)的可以留言或者私信我交流。

        2、另一種方法是在Servlet中去獲取在Spring中注入的bean對(duì)象:

private static WebApplicationContext context;public Object findBean(String beanName) {  if (context == null) {    context = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());  }  return context.getBean(beanName);}

        這樣就可以在Servlet中去獲取到在Spring中注入的bean對(duì)象,通過(guò)bean對(duì)象就可以獲取里面的接口對(duì)象等,已經(jīng)獲取到了bean對(duì)象,剩下的需要做什么就由自己決定了。

MyServlet servlet = (MyServlet) findBean("alarmPollingServlet");queryInterface = servlet.queryInterface;queryInterface.doQuery();

        

        經(jīng)過(guò)這樣,就可以在servlet中去執(zhí)行dao層接口中的方法了,但是,我這里還有一個(gè)問(wèn)題(哈哈,真是問(wèn)題好多),因?yàn)槲业捻?xiàng)目中在Spring中注入的bean對(duì)象里面,還有引用到其他bean對(duì)象,這樣會(huì)在dao層接口的實(shí)現(xiàn)類(lèi)中繼續(xù)報(bào)出空指針異常,目前還未解決,所以沒(méi)有用這種方法。

        以下是我用的方法:        自定義類(lèi)繼承自ApplicationListener<ContextRefreshedEvent>,重寫(xiě)onApplicationEvent(ContextRefreshedEvent arg0)方法:

public class InstantiationTracingBeanPostProcessor implements        ApplicationListener<ContextRefreshedEvent> {  private queryInterface queryInterface;  @Override  public void onApplicationEvent(ContextRefreshedEvent arg0) {    // TODO Auto-generated method stub    if (arg0.getApplicationContext().getParent() == null) {      // 需要執(zhí)行的邏輯代碼,當(dāng)spring容器初始化完成后就會(huì)執(zhí)行該方法。      queryInterface.doQuery();    }  }}        繼承這個(gè)類(lèi),當(dāng)服務(wù)端啟動(dòng)之后,Spring容器初始化完成之后,就會(huì)回調(diào)他的onApplicationEvent(ContextRefreshedEvent arg0)這個(gè)方法,所以,我們將需要執(zhí)行的邏輯代碼寫(xiě)在這個(gè)方法里就可以了,在執(zhí)行這個(gè)方法的時(shí)候,Spring容器已經(jīng)初始化完畢,這樣在用到Spring中注入的對(duì)象時(shí)就不會(huì)再有空指針異常。

        以上內(nèi)容為我自己磕磕絆絆中查詢到的,記錄下來(lái),也希望能夠幫助有同樣困惑的人,如果以上內(nèi)容中有不合理或者錯(cuò)誤的,或者各位大神有什么更好的解決方法,望大家留意或者私信交流,謝謝!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久久久久免费 | 国内精品伊人久久久久网站 | 久久av免费观看 | 精品国产高清一区二区三区 | 狠狠操天天射 | 看片一区二区三区 | 毛片在线免费播放 | 天天看天天摸天天操 | 欧美h版电影在线观看 | 亚洲成人在线免费观看 | 欧美黄色性生活视频 | 成人在线97 | 亚洲一级网站 | 亚洲国产成人一区二区 | 黄色片网站免费 | 中文在线观看视频 | 国产91一区 | 成人一级毛片 | 1314成人网 | 久久精品视频1 | 2019中文字幕在线播放 | 久久91精品视频 | 欧美高清在线精品一区二区不卡 | 一区二区精品视频在线观看 | 泰剧19禁啪啪无遮挡大尺度 | 男女无遮挡羞羞视频 | 久久精品国产99国产精品亚洲 | 2019亚洲日韩新视频 | 一级在线观看视频 | 日本精品网 | 一区二区三区精品国产 | 亚洲成人免费视频在线 | 国产精品性夜天天视频 | 羞羞视频免费网站男男 | 久久精品1区2区 | 午夜激情视频网站 | 电影91| 亚洲网视频 | 久久精品久久精品国产大片 | 亚洲一区在线免费视频 | 黄色香蕉视频 |