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>
就这些,大家帮忙看看,谢谢啦。

解决方案 »

  1.   

    自己找到一些原因了,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="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>
    <bean id="host" class="ioc.test.Host" autowire="byName"></bean>
    <bean id="display" class="ioc.test.Display" autowire="byName"></bean>
    </beans>
    但是执行到
    Computer computer3 = (Computer)ac.getBean("computer3");
    System.out.println("default");
    computer3.run();
    注入方式是默认的时候还是会报空指针异常,暂时不知道怎么回事。
      

  2.   

    当你指定bean标签的autowire="default"时,此时spring是根据beans标签中的default-autowire属性的值进行装配的,而default-autowire的默认值是no,所以你通过spring获取到的id="computer3"的对象实例中成员变量host和display都没有初始化,所以当你调用它们中的方法时就抛空指针异常了
      

  3.   

    你说的很对,原代码就是要在<beans>里加上default-autowire="autodetect",但是加上之后会出现红叉,表示语法错误,鼠标放在上面是这样的错误。这又是什么意思呢?请指教,十分感谢。
      

  4.   

    找到原因了,default-autowire的值必须是no, byName, byType, constructor其中之一,谢谢你。
      

  5.   

    还是有点问题default-autowire="autodetect"还是有问题,这个不是自动检测类型吗?应该可以的…为什么报错。
      

  6.   

    你自己不是已经找到原因了么,default-autowire属性的可选值中没有autodetect这个值
      

  7.   

    以前的资料里有使用的,可能是spring的版本问题吧…