隨筆-7  評論-13  文章-2  trackbacks-0

          看到 Shale 的 Spring Integration 文檔的介紹原理,其中順序如下:

          When asked to resolve a variable name, the following algorithm is performed:

          1.Does a bean with the specified name already exist in some scope (request, session, application)? If so, return it.

          2.Is there a standard JavaServer Faces managed bean definition for this variable name? If so, invoke it in the usual way, and return the bean that was created.

          3.Is there configuration information for this variable name in the Spring WebApplicationContext for this application? If so, use it to create and configure an instance, and return that instance to the caller.

          4.If there is no managed bean or Spring definition for this variable name, return null instead.

          這樣的話,只要 Spring 可以控制 Bean 的 Scope 的話,就可以把 Managed-Bean 的配置放到 Spring Bean 里來配置,一方面,我們可以省去了 JSF 的 Managed Bean 的配置,另外的話,我們可以對 JSF 的 Backing Bean 使用 AOP 以及 Spring 提供的很多功能。過去在 JSF-Spring 中嘗試著去控制 Spring Bean 的 Scope,但是做的并不好,現(xiàn)在 Spring 2.0 給我們提供了這樣的能力,經(jīng)過實(shí)驗(yàn),證明了這樣是可行的。

          不過如果使用 Spring Bean 以后,會造成使用 Managed Bean 的 JSTL 無法使用,其實(shí) JSTL 本身用起來就時好時壞的,所以影響并不太大了。

          整合起來步驟非常的簡單:

          1. 把 Spring 2.0 的 jar 文件放到 lib 下面,當(dāng)前使用的是 Spring 2.0 RC3

          2. 因?yàn)槭褂玫氖?Servlet 2.4,所以要在 web.xml 中加入
              <listener>
                  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
              </listener>

          3. 修改 applicationContext.xml

          注釋或刪掉以下內(nèi)容:

            <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
            "
          http://www.springframework.org/dtd/spring-beans.dtd ">

          修改 <beans> 為:

            <beans xmlns=" http://www.springframework.org/schema/beans "
                 xmlns:xsi="
          http://www.w3.org/2001/XMLSchema-instance "
                 xmlns:aop="
          http://www.springframework.org/schema/aop "
                 xsi:schemaLocation="
           
          http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd ">

          4. 然后就可以按照配置 Spring Bean 的方式來配置 Managed Bean:

              這個是 Request Scope 中的 Bean:
              <bean id="loginBean" class="org.agilejava.icustomer.backingbean.LoginBean"
                    scope="request" autowire="byName">
                  <aop:scoped-proxy/>
              </bean>

              這個是 Session Scope 中的 Bean:
              <bean id="menuBean" class="org.agilejava.framework.commons.menu.MenuBackingBean"
                    scope="session" autowire="byName">
                  <aop:scoped-proxy/>
              </bean>

          雖然短期來看,配置上會少寫了一些,因?yàn)?autowire="byName",但是從長遠(yuǎn)來看,我們可以利用 Spring 的更多功能,比如 AOP 來增強(qiáng) Backing Bean 的能力,我的第一個設(shè)想就是用 AOP 來處理 Backing Bean 中的異常.good

          posted on 2007-11-05 19:43 白切面片 閱讀(326) 評論(0)  編輯  收藏 所屬分類: 軟件工程

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 吴桥县| 红安县| 长岭县| 临汾市| 上林县| 常熟市| 大同县| 巴彦县| 福鼎市| 九江市| 来安县| 安达市| 永吉县| 休宁县| 澜沧| 昌宁县| 肇庆市| 乳山市| 吉林省| 墨竹工卡县| 沛县| 大姚县| 芦溪县| 华阴市| 上饶市| 阿拉尔市| 正宁县| 多伦县| 樟树市| 乌什县| 亳州市| 罗田县| 苍梧县| 麦盖提县| 饶河县| 泰宁县| 砀山县| 松江区| 安泽县| 夏河县| 西乡县|