当前位置: 代码迷 >> Java Web开发 >> 使用spring向service里面注入dao不成功。
  详细解决方案

使用spring向service里面注入dao不成功。

热度:257   发布时间:2016-04-10 23:12:25.0
使用spring向service里面注入dao不成功。求救啊!
本帖最后由 PaperStar 于 2013-12-26 19:29:20 编辑
页面调用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;
    }
  相关解决方案