Spring注入的bean 总是空是为什么
配置文件
<bean id="loginService" class="com.testPlatform.service.LoginService" scope="prototype">
<property name="userDao" ref="userDaoImp"/>
</bean>
<bean id="loginAction" class="com.testPlatform.action.LoginAction">
<property name="loginService" ref="loginService"/>
</bean>
代码片段
public class LoginAction {
private LoginService loginService;
private Integer rtxID;
private String password;
public String loginValidate()
{
User user = loginService.loginValidate(rtxID, password);
if( null == user )
{
return "error";
}
HttpServletRequest request = ServletActionContext.getRequest();
request.getSession().setAttribute("sessionuserinfo", user);
return "success";
}
public LoginService getLoginService() {
return loginService;
}
public void setLoginService(LoginService loginService) {
System.out.println("LoginService setter---------------------------");
this.loginService = loginService;
}
}
每次页面发起请求 来到函数loginValidate()时,发现loginService的值为null不知道为什么
我在LoginService类的构造函数中 增加了日志打印,tomcat启动的时候,出现了相应的日志,说明LoginService的构造函数已经被执行了,但为什么页面发起请求的时候LoginAction 的成员loginService的值为null?
以下是截取的 tomcat启动日志
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@7c4f8358: defining beans [dataSource,sessionFactory,transactionManager,daoTemplate,userDaoImp,loginService,loginAction]; root of factory hierarchy
2015-3-20 14:22:31 org.springframework.orm.hibernate3.HibernateTransactionManager afterPropertiesSet
信息: Using DataSource [org.apache.commons.dbcp.BasicDataSource@7b3cb2c6] of Hibernate SessionFactory for HibernateTransactionManager
UserDaoImp construct---------------------------
LoginService construct---------------------------
setUserDao setter---------------------------
LoginService setter---------------------------
------解决思路---------------------- struts 的action 配置 把class 换成 spring 配置的action 对应的id
????<action?name="login"?class="com.testPlatform.action.LoginAction"?method="loginValidate">
????????????<result?name="error">/resource/login.jsp</result>
????????????<result?name="success">/resource/main.jsp</result>
????????</action>
修改后
????<action?name="login"?class="loginAction" >
????????????<result?name="error">/resource/login.jsp</result>
????????????<result?name="success">/resource/main.jsp</result>
????????</action>
你使用spring 来管理的你的action 所以对象有spring 帮助创建 直接引用spring 配置好的对象id即可