程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> spring入門(3) spring加載配置web

spring入門(3) spring加載配置web

編輯:關於JAVA

Spring初始化容器.三種經常用到的實現:

一、ClassPathXmlApplicationContext:從類路徑中加載。

二 、FileSystemXmlApplicationContext:從文件系統加載。

三、XmlWebApplicationContext:從web系統中加載。

使用1、bean工廠:最簡單的容器,提供了基礎的依賴注入支持。創建各種類型的Bean.

BeanFactory factory = null ; //聲明

ClassPathResource resource = new ClassPathResource( "spring.xml" ); //類路徑

FileSystemResource fileSystemResource =

new FileSystemResource( "D:\\Ncode\\mcode\\sday02 \\src\\spring.xml" );

//系統路徑

//InputStreamResource res

// = new InputStreamResource(

// new FileInputStream("D:\\ Ncode \\ mcode \\sday02\\ src \\spring.xml"));

factory= new XmlBeanFactory(resource) ;

//XmlBeanFactory(參數可以是resource或者fileSystemResource等

//但是不能是 res 原因可以查看:文檔Part III. Core Technologies 6. Resources

// 中6.2 The Resource interface 有關isOpen方法的說明);

factory = new ClassPathXmlApplicationContext( "spring.xml" );

//從類路徑中加載

factory = new

FileSystemXmlApplicationContext( "D:\\Ncode\\mcode\\sday02\\src\\spring.xml" ); //從文件系統加載

HelloService helloService =

factory.getBean( "helloServiceImpl" , HelloServiceImpl. class );

helloService.sayHello();

使用2、

應用上下文:建立在bean工廠基礎之上,提供系統架構服務。 ApplicationCotext,spring更加高級的容器。功能強大:

1.提供文本信息解析工具,包括對國際化支持。

2. 提供載入文件資源的通用方法,如圖片。

3.可以向注冊為監聽器的bean發送事件。

在很少的情況下,使用 BeanFactory,如在移動設備。

ApplicationContext context = new

FileSystemXmlApplicationContext( "file:D:\\Ncode\\mcode\\sday02\\src\\spring.xml" );

context = new

ClassPathXmlApplicationContext( "classpath:spring.xml" );

HelloService helloService =

context.getBean( "helloServiceImpl" , HelloServiceImpl. class );

helloService.sayHello();

使用3、在web應用程序中

1、 采用XMLWebApplication對象 初 始化容器

XmlWebApplicationContext context = new XmlWebApplicationContext();

//默認的路徑/WEB- INF/applicationContext.xml

//applicationContext.xml文件名稱 可以任意起

//重新設置路徑

//context.setConfigLocations(

// new String[] {"/WEB- INF/classes/applicationContext.xml"});

//設置ServletContext上下下文為web應用程序的上下文

context.setServletContext(getServletContext());

//刷新

context.refresh();

//根據id 名稱獲取

HelloDao helloDao = context.getBean( "helloDaoImpl" , HelloDaoImpl. class );

//執行helloDao對象的方法

helloDao.sayHello();

因為 XmlWebApplicationContext默認 加載的 文件和文件名稱為 :

/WEB-INF/applicationContext.xml

因此需要在WEB-INF下添加此配置文件。

2 、 利用 WebApplicationContextUtils工具類

//直接采用 getWebApplicationContext (getServletContext()) 獲 取context對象

WebApplicationContext context=

WebApplicationContextUtils. getWebApplicationContext (getServletContext());

//context =

// WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());

System. out .println(context);

HelloDao helloDao = context.getBean( "helloDaoImpl" , HelloDaoImpl. class );

helloDao.sayHello();

說明:

1、當采用 getWebApplicationContext (getServletContext()) 獲 取context對象的時候,輸出的context對象為null 所以在使用

context.getBean( "helloDaoImpl" , HelloDaoImpl. class ); 會出現空指針的異常

2、當采用 getRequiredWebApplicationContext (getServletContext()); 獲取context對象的時候 會出現如下bug

java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?

Bug解決: 不關是1和2都是因為沒有在 web.xml文件中配置 ContextLoaderListener ,所以只需要在web.xml文件中加入以下代碼中即可

< context- param >

< param-name > contextConfigLocation </ param-name >

< param-value > /WEB-INF/applicationContext.xml </ param-value >

</ context-param >

< listener >

< listener-class >

org.springframework.web.context.ContextLoaderListener

</ listener-class >

</ listener >

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved