??
開始學習Spring了,想做第一個程序測試一下,所以就從網(wǎng)上找到了一個例子,代碼如下,
(先寫好了HelloBean)
?public?static?void?main(String[]?args)?throws?IOException?{
????????InputStream?is?=?new?FileInputStream("bean.xml");
????????BeanFactory?factory?=?new?XmlBeanFactory(is);
???????
????????HelloBean?hello?=?(HelloBean)?factory.getBean("helloBean");
????????System.out.println(hello.getHelloWord());
????}
這段程序其實挺簡單,但是,就是調(diào)試不能通過。可能會有兩種錯誤:
第一,找不到bean.xml,因為你的文件位置放置,和你的代碼導入有問題,也就是說沒有找到對應的位置。
第二,new?XmlBeanFactory(is)這個地方會出現(xiàn)錯誤。因為XmlBeanFactory的構(gòu)造器要求的是一個Resource對象的實例,但是,現(xiàn)在是一個InputStream的實例,所以,程序調(diào)試不能通過。
問題解決辦法:
第一:如果你的bean.xml在src目錄下面,那么可以使用InputStream in = ClassLoader.getSystemResourceAsStream("applicationContext.xml");的辦法來取得流對象。
第二:我們可以封裝一個Resource的實例,Resource是一個接口,其實現(xiàn)類是InputStreamResource,所以,可以創(chuàng)建一個InputStreamResource對象,實現(xiàn)對InputStream的封裝。
改進后的代碼如下:
package org.zy.demo.spring.handle;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;
import org.zy.demo.spring.bean.Hello;
public class HelloHandle {
??? public static void main(String[] args){
??? ???
???
??? ??? ??? InputStream in = ClassLoader.getSystemResourceAsStream("applicationContext.xml");
??? ??? ??? System.out.println(in);
??? ??? ???
??? ??? ??? Resource r = new InputStreamResource(in);
??? ??? ???
??? ??? ??? XmlBeanFactory fac = new XmlBeanFactory(r);
??? ??? ??? System.out.println(fac);
??? ??? ???
??? ??? ??? Hello hello = (Hello)fac.getBean("hello");
??? ??? ??? System.out.println(hello);
??? ??? ???
??? ??? ??? System.out.println(hello.getHellStr());
??? }
???
}
Hello 的代碼:
package org.zy.demo.spring.bean;
public class Hello {
??? String hellStr = "hello,zhangyi";
??? public String getHellStr() {
??? ??? return hellStr;
??? }
??? public void setHellStr(String hellStr) {
??? ??? this.hellStr = hellStr;
??? }
?
}
Bean配置文件為:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
??? <bean id="hello" class="org.zy.demo.spring.bean.Hello">
??? ??? <property name="hellStr">
??? ??? ??? <value>Hello,this is the first spring demo of zhangyi.</value>
??? ??? </property>
??? </bean>
</beans>
此文件放置在src目錄下。
此程序調(diào)試通過,結(jié)果如下:
java.io.BufferedInputStream@1a33d48
log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).
log4j:WARN Please initialize the log4j system properly.
org.springframework.beans.factory.xml.XmlBeanFactory defining beans [hello]; root of BeanFactory hierarchy
org.zy.demo.spring.bean.Hello@941db6
Hello,this is the first spring demo of zhangyi.
希望對spring的初學者有所幫助。
===============================================================================================
我的第二個測試小程序,代碼如下:
??? public void sayHello2(){
??? ??? ApplicationContext ctx = new FileSystemXmlApplicationContext("/src/applicationContext.xml");
??? ??? System.out.println(ctx);
??? ???
??? ??? Hello hello = (Hello)ctx.getBean("hello");
??? ??? System.out.println(hello);
??? ???
??? ??? System.out.println(hello.getHellStr());
??? ???
??? }
這一段程序和上面的代碼差不多。容易出錯的地方在于
目錄,
我的目錄結(jié)構(gòu)如下圖:

因為,默認情況下,程序查找文件的目錄是你的工作目錄,在eclipse下,就是工程的目錄
但是,我們的xml文件是在src目錄下面,所以,在路經(jīng)上要使用/src/applicationContext.xml
|----------------------------------------------------------------------------------------|
版權(quán)聲明 版權(quán)所有 @zhyiwww
引用請注明來源 http://www.aygfsteel.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2007-06-30 23:38
zhyiwww 閱讀(973)
評論(0) 編輯 收藏 所屬分類:
j2ee