ssh 注解封装注入问题,求高手指点下

Artemis丶月 2014-02-20 12:32:48
目前运行JUbit测试添加数据时会报这个异常
No unique bean of type [com.zwd.dao.BaseDao] is defined: expected single matching bean but found 3: [prodectDao, stockDao, userDao]
其中[prodectDao, stockDao, userDao]都是和一下一样的写法,继承BaseDaoImpl

@Component("prodectDao")
public class ProductDaoImpl extends BaseDaoImpl<Product> implements ProductDao {

}

而BaseDaoImpl是继承HibernateDaoSupport

public class BaseDaoImpl<E> extends HibernateDaoSupport implements BaseDao<E>{
//具体实现省略了...
}


现在Junit Test是这样的

@Resource
private UserService userService;
@Test
public void addUser() {
User user = new User();
user.setName("test");
user.setPassword("123456");
userService.saveEntity(user);
}


我也不知道问题出现在哪,调试了很旧就是搞不明白,求高手指路,我在线等,谢谢
...全文
195 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
BaseDao有三个实现了,prodectDao, stockDao, userDao,你要指定是哪一个才行。你哪里使用BaseDao了,可以这样指定 : @Resource("prodectDao") BaseDao baseDao;
ay转身遇 2014-02-20
  • 打赏
  • 举报
回复
从报错信息来看,是找到了3个相同的类型的Dao 楼主可以在注入spring的时候把@Autowired全部换成@Resource
Artemis丶月 2014-02-20
  • 打赏
  • 举报
回复
我的BaseDao 肯定也是在BaseService使用的 问题说以

public class BaseServiceImpl<E> implements BaseService<E>{
	
	private BaseDao<E> baseDao;
//省略get set}
想你这么说继承BaseService的具体ServiceImpl就需要注入baseDao了 类似这样

public class UserServiceImpl extends BaseServiceImpl<User> implements UserService {
   private UserDao userDao;
	
	public UserDao getUserDao() {
		return userDao;
	}
	@Autowired
	public void setUserDao(@Qualifier("userDao")UserDao userDao) {
		super.setBaseDao(userDao);
		this.userDao = userDao;
	}
}
这样如果一个具体的额Service需要同时引用两个dao拿又报错了,所以觉得行不通
火光闪耀 2014-02-20
  • 打赏
  • 举报
回复
楼上正解,你的baseDao有多个实现,代码不知道你要用哪一个,所以你需要手动指定才行

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧