posts - 14, comments - 15, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

                  如果我們的系統(tǒng)不是分布式的(在分布式里,我一般自己加載spring的配置文件),不是一般的application,通過自己加載Spring的配置文件的方式。而是一般的web應(yīng)用,我們通過在web.xml里配置spring的配置文件。我們?cè)趺捶奖愕牡玫揭粋€(gè)Bean的實(shí)例呢?當(dāng)然,web應(yīng)用啟動(dòng)后,它已經(jīng)創(chuàng)建好一個(gè)WebApplicationContext(這個(gè)是接口,其實(shí)也是ApplicationContext類型的,因?yàn)閃ebApplicationContext繼承自ApplictionContext這個(gè)接口)類型的實(shí)例對(duì)象,通過org.springframework.web.context.support.WebApplicationContextUtils里的
          getWebApplicationContext(ServletContext sc)可以得到這個(gè)對(duì)象的引用(這個(gè)就像我們一般的java application下得到ApplicationContext類型的引用一樣),我們就可以通過它的getBean方法得到我們的bean實(shí)例了。但是這里有個(gè)問題getWebApplicationContext(ServletContext sc)這個(gè)方法的參數(shù)ServletContext代表的是你web應(yīng)用的環(huán)境,也就是說,也就是說web應(yīng)用環(huán)境下特有的。這個(gè)時(shí)候如果你想得到一個(gè)bean的話,必須要有這個(gè)ServletContext對(duì)象存在,如果你每個(gè)類里都寫一個(gè)方法來接受ServletContext對(duì)象,從而得到WebApplicationContext類型實(shí)例的引用,之后再得到bean,進(jìn)行你要的操作,這個(gè)是不是很麻煩?這個(gè)不是要寫很多代碼么?我覺得可以把獲得bean的這個(gè)操作的功能代碼放在一個(gè)Servlet里,讓這個(gè)Servlet在web應(yīng)用啟動(dòng)的時(shí)候加載,我們之后把這個(gè)Servlet當(dāng)作普通類使用,調(diào)用里面的getBean方法就可以了。這個(gè)servlet的代碼如下:

           

          package com.nstc.cti.event;

          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;

          import org.springframework.web.context.WebApplicationContext;
          import org.springframework.web.context.support.WebApplicationContextUtils;

          public class GetBean extends HttpServlet {

              
          private static WebApplicationContext context;

              
          public void init() throws ServletException {
                  context 
          = WebApplicationContextUtils.getWebApplicationContext(this
                          .getServletContext());
              }


              
          public static Object getBean(String id) {
                  Object bean 
          = context.getBean(id);
                  
          return bean;
              }

          }

          web.xml配置里:
          <?xml version="1.0" encoding="UTF-8"?>
          <web-app version="2.5" 
              xmlns
          ="http://java.sun.com/xml/ns/javaee" 
              xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance" 
              xsi:schemaLocation
          ="http://java.sun.com/xml/ns/javaee 
              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
          >
           
          <!-- Spring的配置 -->
            
          <context-param>
                  
          <param-name>contextConfigLocation</param-name>
                  
          <param-value>/WEB-INF/beans.xml</param-value>
              
          </context-param>
              
          <servlet>
                  <servlet-name>springInitServlet</servlet-name>
                  <servlet-class>
                      org.springframework.web.context.ContextLoaderServlet
                  </servlet-class>
                  <load-on-startup>1</load-on-startup>
              </servlet>
            <servlet>

              
          <servlet-name>GetBeanServlet</servlet-name>
              
          <servlet-class>com.nstc.cti.event.GetBean</servlet-class>
                
          <load-on-startup>3</load-on-startup>
            
          </servlet>
             
          <!--Spring配置結(jié)束  -->
            
          <servlet-mapping>
              
          <servlet-name>GetBeanServlet</servlet-name>
              
          <url-pattern>/servlet/GetBeanServlet</url-pattern>
            
          </servlet-mapping>
           
            
          <welcome-file-list>
              
          <welcome-file>index.jsp</welcome-file>
            
          </welcome-file-list>
          </web-app>

          紅色也可以為:

              <listener>
                  
          <listener-class>
                      org.springframework.web.context.ContextLoaderListener
                  
          </listener-class>
              
          </listener>



          使用示例:

          假使我有一個(gè)Person的類,屬性有name和age,在spring配置文件里配置的id為“person”

          你在你的servlet或者jsp想得到這個(gè)實(shí)例的時(shí)候,直接這么做就可以了:

          Person person=(Person)GetBeanServlet.getBean("person");


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          我要啦免费统计
          主站蜘蛛池模板: 石嘴山市| 重庆市| 浦县| 丰宁| 扎鲁特旗| 泾阳县| 曲松县| 双辽市| 尉氏县| 龙山县| 元朗区| 泊头市| 长海县| 武平县| 云霄县| 罗山县| 漳浦县| 三门县| 扎兰屯市| 庄河市| 青海省| 西盟| 石棉县| 江永县| 鄂托克前旗| 金乡县| 安吉县| 阜平县| 枝江市| 永济市| 威信县| 伊金霍洛旗| 东乌| 栾川县| 霍城县| 石台县| 昌邑市| 丰都县| 清远市| 白山市| 鄂托克旗|