`
YYZhQ
  • 浏览: 16708 次
文章分类
社区版块
存档分类
最新评论

BeanCreationException: No unique bean of type

 
阅读更多
我定义了一个基类接口BaseDao,下面有些update\save的方法;

然后我用一个BaseDaoImpl去实现这个接口;好啦,然后我现在有两个Dao接口,一个ADao extends BaseDao,一个BDao extends BaseDao; 然后再有这两个Dao的实现: ADaoImpl extends BaseDaoImpl implements ADao; BDaoImpl extends BaseDaoImpl implements BDao;

这两个实现都加了@repository。结果就是启动错:

No unique bean of type [com.a.b.BaseDao] is defined: expected single matching bean but found 2: [aDaoImpl, bDaoImpl]


出现这个异常的原因是因为我用了@Autowird这个注解,这个注解是根据类型的方式搜索匹配的,找到了两个相符的依赖类,对于上述配置就是找到了basedao 的两个 bean: adaoimpl , bdaoimpl。


对于这种同类型class有多个实例的解决方案的一种方案是继续延用autowired,不过通过@Qualifier指明是哪个名字的bean,如:

Java代码
  1. @Autowired
  2. publicvoidsetADao(@Qualifier("aDaoImpl")ADaoadao){
  3. this.adao=adao;
  4. }


另外一种方案是使用@Resource这个注解,其功能与@autowired差不多,但是可以通过指定bean name或bean type注入相关bean,默认是按name注入,比autowired灵活很多,如:
Java代码
  1. @Resource
  2. privateADaoaDaoImpl;

原文地址:http://hi.baidu.com/laxinicer/blog/item/7dba4635aaf2ea94a61e12c9.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics