我在Dao层新建了一个UserDao@Component
public class UserDao extends HibernateDaoSupport { @Resource(name="sessionFactory")
public void setSuperSessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}

         @Transactional
public User getUserByName(String name) {
User tmp = new User();
System.out.println("准备从数据库中取出该USER对象信息");
tmp = (User)this.getHibernateTemplate().get(User.class, 1);
return tmp;
}
}中间层建了一个UserService@Component
public class UserService {
private UserDao userDao;

public boolean checkUser(User user) {
User tmp = userDao.getUserByName(user.getName());
System.out.println("USER:" + user.getName() + "\t" + user.getPassword() + "\t" + user.getAge());
System.out.println("TMP :" + tmp.getName() + "\t" + tmp.getPassword() + "\t" + tmp.getAge());
tmp.setPassword("asdfasdf");
return true;
} @Autowired
public void setUserDao(UserDao userDao) {
System.out.println("为UserService注入UserDao");
this.userDao = userDao;
}

}启动Tomcat的时候出现无法注入userDao的错误,可是我把UserDao中getUserByName方法上面的@Transational注解去掉时,这样就可以正常注入了,这是怎么回事,求解

解决方案 »

  1.   

    传送门:http://blog.csdn.net/qq183293/article/details/7884127
    ,不解释
      

  2.   

    自动注入sessionFactory也要加@Autowired  @Resource(name="sessionFactory")
      @Autowired
      public void setSuperSessionFactory(SessionFactory sessionFactory) {
        super.setSessionFactory(sessionFactory);
      }
      

  3.   

    你就一个查询有必要用事物吗....也许是你的事物没有配好.再者,你如果用hibernatedaosuppo的话,你的userDao一般都是用作顶层dao,让其他的dao去继承userDao,