zhyiwww
          用平實(shí)的筆,記錄編程路上的點(diǎn)點(diǎn)滴滴………
          posts - 536,comments - 394,trackbacks - 0
          ??
          開始學(xué)習(xí)Spring了,想做第一個(gè)程序測(cè)試一下,所以就從網(wǎng)上找到了一個(gè)例子,代碼如下,
          (先寫好了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());
          ????}
          這段程序其實(shí)挺簡(jiǎn)單,但是,就是調(diào)試不能通過。可能會(huì)有兩種錯(cuò)誤:
          第一,找不到bean.xml,因?yàn)槟愕奈募恢梅胖茫湍愕拇a導(dǎo)入有問題,也就是說沒有找到對(duì)應(yīng)的位置。
          第二,new?XmlBeanFactory(is)這個(gè)地方會(huì)出現(xiàn)錯(cuò)誤。因?yàn)閄mlBeanFactory的構(gòu)造器要求的是一個(gè)Resource對(duì)象的實(shí)例,但是,現(xiàn)在是一個(gè)InputStream的實(shí)例,所以,程序調(diào)試不能通過。

          問題解決辦法:
          第一:如果你的bean.xml在src目錄下面,那么可以使用InputStream in = ClassLoader.getSystemResourceAsStream("applicationContext.xml");的辦法來取得流對(duì)象。
          第二:我們可以封裝一個(gè)Resource的實(shí)例,Resource是一個(gè)接口,其實(shí)現(xiàn)類是InputStreamResource,所以,可以創(chuàng)建一個(gè)InputStreamResource對(duì)象,實(shí)現(xiàn)對(duì)InputStream的封裝。

          改進(jìn)后的代碼如下:
          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.

          希望對(duì)spring的初學(xué)者有所幫助。


          ===============================================================================================

          我的第二個(gè)測(cè)試小程序,代碼如下:
          ??? 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());
          ??? ???
          ??? }
          這一段程序和上面的代碼差不多。容易出錯(cuò)的地方在于目錄,
          我的目錄結(jié)構(gòu)如下圖:
          directory.png
          因?yàn)椋J(rèn)情況下,程序查找文件的目錄是你的工作目錄,在eclipse下,就是工程的目錄
          但是,我們的xml文件是在src目錄下面,所以,在路經(jīng)上要使用/src/applicationContext.xml






          |----------------------------------------------------------------------------------------|
                                     版權(quán)聲明  版權(quán)所有 @zhyiwww
                      引用請(qǐng)注明來源 http://www.aygfsteel.com/zhyiwww   
          |----------------------------------------------------------------------------------------|
          posted on 2007-06-30 23:38 zhyiwww 閱讀(973) 評(píng)論(0)  編輯  收藏 所屬分類: j2ee
          主站蜘蛛池模板: 阿勒泰市| 马关县| 瑞昌市| 庆阳市| 淅川县| 柳河县| 闽侯县| 鄂州市| 清镇市| 弥勒县| 西安市| 嘉定区| 曲阜市| 福鼎市| 凤台县| 清河县| 宜兰市| 稷山县| 辉南县| 海淀区| 金阳县| 湛江市| 枞阳县| 淳化县| 彭州市| 临安市| 海原县| 杭州市| 西贡区| 石首市| 哈巴河县| 邵东县| 马公市| 信阳市| 黑水县| 乌鲁木齐市| 凤凰县| 阳春市| 碌曲县| 神池县| 沧州市|