zhyiwww
用平实的笔,记录编程路上的点点滴滴………
posts - 536,comments - 394,trackbacks - 0
  
开始学习Spring了,想做第一个程序测试一下,所以就从网上找到了一个例子,代码如下,
(先写好了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());
    }
这段程序其实挺简单,但是,就是调试不能通过。可能会有两种错误:
第一,找不到bean.xml,因为你的文件位置放置,和你的代码导入有问题,也就是说没有找到对应的位置。
第二,new XmlBeanFactory(is)这个地方会出现错误。因为XmlBeanFactory的构造器要求的是一个Resource对象的实例,但是,现在是一个InputStream的实例,所以,程序调试不能通过。

问题解决办法:
第一:如果你的bean.xml在src目录下面,那么可以使用InputStream in = ClassLoader.getSystemResourceAsStream("applicationContext.xml");的办法来取得流对象。
第二:我们可以封装一个Resource的实例,Resource是一个接口,其实现类是InputStreamResource,所以,可以创建一个InputStreamResource对象,实现对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目录下。
此程序调试通过,结果如下:
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());
       
    }
这一段程序和上面的代码差不多。容易出错的地方在于目录,
我的目录结构如下图:
directory.png
因为,默认情况下,程序查找文件的目录是你的工作目录,在eclipse下,就是工程的目录
但是,我们的xml文件是在src目录下面,所以,在路经上要使用/src/applicationContext.xml






|----------------------------------------------------------------------------------------|
                           版权声明  版权所有 @zhyiwww
            引用请注明来源 http://www.blogjava.net/zhyiwww   
|----------------------------------------------------------------------------------------|
posted on 2007-06-30 23:38 zhyiwww 阅读(966) 评论(0)  编辑  收藏 所属分类: j2ee

只有注册用户登录后才能发表评论。


网站导航: