首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

spring生手

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

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="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();
注入方式是默认的时候还是会报空指针异常,暂时不知道怎么回事。
[其他解释]

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

你说的很对,原代码就是要在<beans>里加上default-autowire="autodetect",但是加上之后会出现红叉,表示语法错误,鼠标放在上面是这样的错误。这又是什么意思呢?请指教,十分感谢。
[其他解释]
引用:
当你指定bean标签的autowire="default"时,此时spring是根据beans标签中的default-autowire属性的值进行装配的,而default-autowire的默认值是no,所以你通过spring获取到的id="computer3"的对象实例中成员变量host和display都没有初始化,所以当你调用它们中的方法时就抛空指针异常了
     ……

找到原因了,default-autowire的值必须是no, byName, byType, constructor其中之一,谢谢你。
[其他解释]
引用:
当你指定bean标签的autowire="default"时,此时spring是根据beans标签中的default-autowire属性的值进行装配的,而default-autowire的默认值是no,所以你通过spring获取到的id="computer3"的对象实例中成员变量host和display都没有初始化,所以当你调用它们中的方法时就抛空指针异常了
     ……

还是有点问题default-autowire="autodetect"还是有问题,这个不是自动检测类型吗?应该可以的…为什么报错。
[其他解释]
引用:
引用:当你指定bean标签的autowire="default"时,此时spring是根据beans标签中的default-autowire属性的值进行装配的,而default-autowire的默认值是no,所以你通过spring获取到的id="computer3"的对象实例中成员变量host和display都没有初始化,所以当你调……

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

你自己不是已经找到原因了么,default-autowire属性的可选值中没有autodetect这个值
[其他解释]
引用:
引用:
引用:当你指定bean标签的autowire="default"时,此时spring是根据beans标签中的default-autowire属性的值进行装配的,而default-autowire的默认值是no,所以你通过spring获取到的id="computer3"的对象实例中成员变量host和display都……

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

热点排行