读书人

为什么小弟我的spring依赖注入不成功

发布时间: 2011-12-02 23:47:57 作者: rapoo

为什么我的spring依赖注入不成功?
action里执行到这句
List reptAgilityConfigList = reptAgilityConfigDAO.findByProperty "localNetId ", "351 ");
就报
严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
错误。
就好象spring的配置文件没写一样。
我的action:
private ReptAgilityConfigDAO reptAgilityConfigDAO;

public ReptAgilityConfigDAO getReptAgilityConfigDAO() {
return reptAgilityConfigDAO;
}

public void setReptAgilityConfigDAO(
ReptAgilityConfigDAO reptAgilityConfigDAO) {
this.reptAgilityConfigDAO = reptAgilityConfigDAO;
}

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserSelectForm userSelectForm = (UserSelectForm) form;// TODO
// Auto-generated
// method stub
log.debug( "select ");
if (userSelectForm.getUserName().equals( "abc ")
&& userSelectForm.getPassword().equals( "123 ")) {
// reptAgilityConfigDAO = new ReptAgilityConfigDAO();
List reptAgilityConfigList = reptAgilityConfigDAO.findByProperty(
"localNetId ", "351 ");
request
.setAttribute( "reptAgilityConfigList ",
reptAgilityConfigList);
return mapping.findForward( "initIframe ");
}
return mapping.findForward( "input ");
}
}
applicationContext.xml:
<?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= "dataSource "
class= "org.apache.commons.dbcp.BasicDataSource ">
<property name= "driverClassName ">
<value> oracle.jdbc.driver.OracleDriver </value>
</property>
<property name= "url ">
<value> jdbc:oracle:thin:@133.128.9.23:1521:test </value>
</property>
<property name= "username ">
<value> test </value>
</property>
<property name= "password ">
<value> test* </value>
</property>
</bean>
<bean id= "sessionFactory "
class= "org.springframework.orm.hibernate3.LocalSessionFactoryBean ">
<property name= "configLocation ">
<value> com/hibernate.cfg.xml </value>
</property>
<property name= "dataSource ">
<ref bean= "dataSource " />
</property>
</bean>
<bean id= "ReptAgilityConfigDAO "
class= "com.yourcompany.ReptAgilityConfigDAO ">
<property name= "sessionFactory ">
<ref bean= "sessionFactory " />
</property>
</bean>
<bean name= "/userSelect "
class= "com.yourcompany.struts.action.UserSelectAction "
singleton= "false ">
<property name= "reptAgilityConfigDAO ">


<ref bean= "ReptAgilityConfigDAO " />
</property>
</bean>
</beans>
这个问题郁闷我2周了,都快疯了,各位高手当初在学习的时候也一定有过这样的体会吧,所以请大家厚道一些,都进来帮帮我啊。
我只有这么些分,不够的话再开个帖字啊,大家一定要帮我。

[解决办法]
在struts-config.xml文件有这样的配置吗?
<action path= "/userSelect "
type= "org.springframework.web.struts.DelegatingActionProxy "
scope= "request ">
<forward name= "success " path= "/*.jsp "/>
</action>

<plug-in className= "org.springframework.web.struts.ContextLoaderPlugIn ">
<set-property property= "contextConfigLocation " value= "/WEB-INF/applicationContext.xml " />
</plug-in>
[解决办法]
<bean id= "ReptAgilityConfigDAO "
class= "com.yourcompany.ReptAgilityConfigDAO ">

这个和你aciton里头的不一样吧
把id首字母改成小写试试看
[解决办法]
List reptAgilityConfigList = reptAgilityConfigDAO.findByProperty "localNetId ", "351 ");

朋友,你能确定你这句就一定能返回个查询List吗?我的意思是,会不会在查询的过程中遇到了空指针异常,比如数据的为空,reptAgilityConfigDAO这个类中用没用到什么空对象。
[解决办法]
没有应该不行,你spring、hibernate、struts都是什么版本的
[解决办法]
我提供一个思路你看看吧

第一,把你的bean id 以及配置相关引用的首字母改成小写
spring的注入首字母大写似乎是会出问题

第二,判断空指针的来源
你在进入action时候打个断点看variable,debug状态下应该能看到是否注入
不能注入多半是你的大小写问题

我觉得看调试下的reptAgilityConfigDAO变量的值可以帮你找到错误在哪里
这个变量应该在this下头
[解决办法]
<property name= "reptAgilityConfigDAO ">
<ref bean= "ReptAgilityConfigDAO " />

这部分你也改了吗?
[解决办法]
<bean id= "ReptAgilityConfigDAO "
class= "com.yourcompany.ReptAgilityConfigDAO ">


这个DAO有impl文件吗,有的话用impl试试看呢
[解决办法]
Action中是不能直接这么依赖注入的,必须利用框架,楼主可以看看这篇文章:

(Struts调用Spring服务类的三种方法)
http://stamen.javaeye.com/blog/24476

读书人网 >Java Web开发

热点推荐