初学spring容易碰到的问题
开始学习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());
}
这一段程序和上面的代码差不多。容易出错的地方在于 目录,
我的目录结构如下图:
因为,默认情况下,程序查找文件的目录是你的工作目录,在eclipse下,就是工程的目录
但是,我们的xml文件是在src目录下面,所以,在路经上要使用/src/applicationContext.xml
|----------------------------------------------------------------------------------------|
版权声明 版权所有 @zhyiwww
引用请注明来源 http://www.blogjava.net/zhyiwww
|----------------------------------------------------------------------------------------|