日期:2014-05-19  浏览次数:20726 次

spring新手
main方法报空指针异常,请大家帮忙看看什么原因。
public class Computer {

private Host host;
private Display display;

public void run(){
System.out.println("I am the computer, I am running.");
System.out.println(this.host.run());
System.out.println(this.display.run());
}

public Host getHost() {
return host;
}

public void setHost(Host host) {
this.host = host;
}

public Display getDisplay() {
return display;
}

public void setDisplay(Display display) {
this.display = display;
}

}
public class Host {

public String run(){
return "I am the host, I am running.";
}
}
public class Display {

public String run(){
return "I am the Displayer, I am running.";
}
}
package ioc.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestIoc {
public static void main(String[] args){

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

Computer computer1 = (Computer)ac.getBean("computer1");
System.out.println("byName");
computer1.run();

Computer computer2 = (Computer)ac.getBean("computer2");
System.out.println("byType");
computer2.run();

Computer computer3 = (Computer)ac.getBean("computer3");
System.out.println("default");
computer3.run();

}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans 
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="computer1" class="ioc.test.Computer" autowire="byName"></bean>
<bean id="computer2" class="ioc.test.Computer" autowire="byType"></bean>
<bean id="computer3" class="ioc.test.Computer" autowire="default"></bean>
</beans>
就这些,大家帮忙看看,谢谢啦。
------最佳解决方案--------------------
当你指定bean标签的autowire="default"时,此时spring是根据beans标签中的default-autowire属性的值进行装配的,而default-autowire的默认值是no,所以你通过spring获取到的id="computer3"的对象实例中成员变量host和display都没有初始化,所以当你调用它们中的方法时就抛空指针异常了
------其他解决方案--------------------
自己找到一些原因了,Host和Display的对象在调用run方法时候也需要初使化,所以也需要注入
<?xml version="1.0" encoding="UTF-8"?>
<beans 
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="comp