spring @Autowire 的注解默认是按类型注入bean,比如下面这个类
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
@Repository
public class FloorGenerator {
@Autowired
private DataSource floorGenDataSource;
@Autowired
private TopicDao topicDao;
@Autowired
private TopicXDB topicXDB;
//some method here...
}
floorGenDataSource是DataSource类型,在注入floorGenDataSource的时候,如果相同类型的DataSource已经注入很多个 bean,这时候报会异常:
No unique bean of type [com.a.b.BaseDao] is defined: expected single matching bean but found 2: [dataSource, userDataSource]
意思是按类型注入的时候,有两个DataSource类型的bean,spring不知道帮你注入哪个,所以报异常。
解决方案很简单,不让按类型注入,按名称注入就可以了。
在private DataSource floorGenDataSource;上面写好@Qualifier,并注明按哪个名称的bean注入,如:
@Repository
public class FloorGenerator {
@Autowired
@Qualifier("dataSource")
private DataSource floorGenDataSource;
@Autowired
private TopicDao topicDao;
@Autowired
private TopicXDB topicXDB;
//some method here...
}