欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
外部系統 訪(fǎng)問(wèn)已初始化的spring實(shí)例, 目前找到兩種方法

外部系統 訪(fǎng)問(wèn)已初始化的spring實(shí)例, 目前找到兩種方法

發(fā)布時(shí)間:2008年01月18日 作者:bsspirit

閱讀次數:781次 類(lèi)別:DVS項目開(kāi)發(fā)過(guò)程 永久鏈接 Trackback 1條評論
1. 通過(guò)ApplicationContextAware
2. 通過(guò)WebApplicationContext

外部系統 訪(fǎng)問(wèn)已初始化的spring實(shí)例, 目前找到兩種方法
1. 通過(guò)ApplicationContextAware
2. 通過(guò)WebApplicationContext

先介紹一點(diǎn)需求。 業(yè)務(wù)系統要和gis系統進(jìn)行集成,本來(lái)是分來(lái)的兩個(gè)war包通過(guò)Web Service調用, 現在要合到一個(gè)war中,一起部署。業(yè)務(wù)系統使用的架構是以spring基礎,struts+ibatis+xfire。 GIS的架構,主要是jsf, arc-gis (對這部分不太了解)。 現在GIS系統需要調用業(yè)務(wù)系統的數據,既然兩個(gè)系統現在準備合成一個(gè)系統,Web Service的方式肯定是一種不太可取的方法,本地調用才有保證效率。

但是,問(wèn)題出在了GIS系統,不是按照spring架構的IOC方式注入的?,F在需要開(kāi)一個(gè)口,給GIS系統spring的全局Context,可以讓 GIS不通過(guò)IOC也可以得到beans。昨天試了一下,Spring支持這種外來(lái)的功能,目前發(fā)現了兩種辦法。不過(guò)這兩種辦法,都存在著(zhù)風(fēng)險,后面會(huì )說(shuō)到。

1. 通過(guò)ApplicationContextAware。寫(xiě)一個(gè)子類(lèi),實(shí)現ApplicationContextAware的方法,然后把這個(gè)類(lèi)配置到Spring容器中。啟動(dòng)的時(shí)候,容器會(huì )自動(dòng)調用setApplicationContext的方法, 把容器全局的context給傳進(jìn)來(lái), 賦值給靜態(tài)變量ctx。然后,非spring模塊,想調用spring容器實(shí)例的時(shí)候,可以直接通過(guò)SetSpringContext .getCtx(); 獲得這個(gè)context。 因此,方法不依賴(lài)于servlet。

--------------------------------------------------------------------------------------------------------
package com.dvs.test;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class SetSpringContext implements ApplicationContextAware{
  
    private static ApplicationContext ctx;

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.ctx = applicationContext;
    }

    public static ApplicationContext getCtx() {
        return ctx;
    }

    public static void setCtx(ApplicationContext ctx) {
        SetSprContext.ctx = ctx;
    }

}
------------------------------------------------------------------------------------------------------------------

風(fēng)險:
1) 由于spring中的單例和Gof所描述的單例不一樣。因此,其實(shí)applicationContext是代碼級非單例的,把非靜態(tài)的對象給一個(gè)靜態(tài)對象,這是不安全的。
2) 由于把整個(gè)的spring全局實(shí)例,對外暴露,因此給了其他系統,可以修改spring容器全局變量的功能,容易受到惡意篡改,或者安全的漏洞。

2. 通過(guò)WebApplicationContext。這種方法的出發(fā)點(diǎn),是兩個(gè)工程在一個(gè)war包里面,因此ServletContext是全局共享的。調用 WebApplicationContextUtils.getWebApplicationContext(getServletContext()); 傳一個(gè)ServletContext, 然后獲得WebApplcationContext的全局實(shí)例, 再把這個(gè)實(shí)例子,傳給一個(gè)靜態(tài)變量,給Servlet調用。

--------------------------------------------------------
package com.dvs.test;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

public class GetSpringContext extends HttpServlet {
   
     /**
      *  <servlet>
      *  <servlet-name>GetSpringContext</servlet-name>
      * <servlet-class>com.dvs.test.GetSpringContext</servlet-class>
      *  <load-on-startup>1</load-on-startup>
      *  </servlet>
      *  容器起動(dòng)的時(shí)候,加載這個(gè)servlet。
      */
    public void init(){
        WebApplicationContext wac =WebApplicationContextUtils.getWebApplicationContext(getServletContext());
        SpringDTO.setCtx(wac);
    }
  
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
           // wac =WebApplicationContextUtils.getWebApplicationContext(getServletContext());
    }
}

中間的類(lèi):
package com.dvs.test;

import org.springframework.web.context.WebApplicationContext;

/**
 * @author Conan
 *
 */
public class GetSpringContextFactory<E> {

    public E getBean(String name) {
        WebApplicationContext wac = SpringDTO.getCtx();
        return (E) wac.getBean(name);
    }

}

中間的類(lèi):
package com.dvs.test;

import org.springframework.web.context.WebApplicationContext;

public class SpringDTO {
  
    private static WebApplicationContext ctx;

    public static WebApplicationContext getCtx() {
        return ctx;
    }

    public static void setCtx(WebApplicationContext ctx) {
        SprFactory.ctx = ctx;
    }

}

調用的類(lèi):
package com.dvs.test;

import java.util.List;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dvs.sec.model.usergroup.UserGroupDTO;
import com.dvs.sec.service.usergroup.UserGroupService;

public class TestSpring extends HttpServlet{
  
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        test();
    }

    public void test(){
        GetSpringContextFactory ctx = new GetSpringContextFactory();
        UserGroupService ug = (UserGroupService) ctx.getBean("userGroupService");
        try {
            List<UserGroupDTO> list= ug.getUserGroupList();
            for(UserGroupDTO dto:list){
                System.out.println(dto.getPk());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

----------------------------------------------------------
風(fēng)險:
1. 與第一種方法一樣,都是給外部一個(gè)static變量,把全局的spring實(shí)例給外部用。
2. 這種方式,外部調用的時(shí)候必需依賴(lài)與Servlet,并且得到的是Spring Context的子類(lèi)。


目前來(lái)看,第一種方式,比第二更靈活,但風(fēng)險更大。

 更進(jìn)一步的論證,或者其他的用法,還待后面的繼續開(kāi)發(fā),測試中。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
普通Java類(lèi)獲取Spring的bean
spring MVC3深入研究(2)
Spring獲取Bean的幾種方式
spring在web.xml中和在struts中的不同配置 - gwt600的專(zhuān)欄 - C...
Spring源代碼分析之(二):IOC容器在web容器中的啟動(dòng)
轉:SpringMVC理解之一:應用上下文webApplicationContext
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久