页面调用action,action调用service,service调用dao
用Debug查看action调用service方法时service有值,但是service调用dao时,dao为null
折腾一下午了,死活找不到原因。我两个写的貌似一样啊,为什么一个成功,一个不成功呢?
程序也不报错,求大神指点啊!
set方法已加入,名称也都核对没问题
//spring配置文件
<bean id="LoginAction" class="com.action.LoginAction" scope="prototype">
<property name="service" ref="LoginService"></property>
</bean>
<bean id="LoginService" class="com.service.impl.LoginServiceImpl">
<property name="dao" ref="UserDao"></property>
</bean>
<bean id ="UserDao" class="com.dao.impl.UserDaoImpl" >
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
//service文件
private UserDao dao;
public void setDao(UserDao dao) {
this.dao = dao;
}
public boolean checkEmail(String s) {
int num = dao.checkEmail(s);
return num==0?true:false;
}
//dao文件
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
public int checkEmail(String s) {
String hql="frome User where email = ?";
List<User> list =this.getHibernateTemplate().find(hql,s);
return list.size();
}
}
------解决方案--------------------
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">你这样试试
<constructor-arg ref="myDataSource"></constructor-arg>
</bean>
<bean id="aDao" class="com.defonds.jdbc.test.dao.ADaoImpl">
<property name="jdbcTemplate">
<ref bean="jdbcTemplate"/>
</property>
</bean>
还有,你的 UserDao 里 setDao 何意?你不会 service 里没有 setDao 吧?
------解决方案--------------------
看看启动或运行过程中的日志是否报错?
会不会是<property?name="sessionFactory"?ref="sessionFactory">没有配置真确导致Dao注入失败。注意这个名字sessionFactory是否和配置的一致。
------解决方案--------------------
造成这种原因主要你是命名不规范;
你的dao是:
public class UserDaoImpl extends HibernateDaoSupport implements UserDao
但你的配置文件命名却是:
<bean id ="UserDao" class="com.dao.impl.UserDaoImpl" >,
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
这是不合理的,这个bean id ="UserDao",意思是说你的UserDaoImpl类中,是通过setUserDao注入进来,而你的却是setDao,所以注入不进来。一般的 bean id ="xxx",这个xxx应该和你的类名一致,并且首字母小写,也就是userDaoImpl,然后service中:
private UserDao userDaoImpl;
public void setUserDaoImpl(UserDao userDaoImpl) {
this.userDaoImpl = userDaoImpl;
}