为什么xml文件中配置id="masterDataSource",代码中却是DataSource dataSource;

最近刚接到一个程序要修改,它的jdbc.properties配置成

master.database.driver=oracle.jdbc.driver.OracleDriver...

然后spring-datasource配置成

<bean id="masterDataSource"
...<property name="driverClassName" value="${master.database.driver}"/>...

mybaits配置成

 <bean id="sqlSessionFactory"....
 <property name="dataSource" ref="masterDataSource"/>
...

这些都没有疑问,问题是代码中直接操作数据库的部分dao用的却是

@Autowired
 private DataSource dataSource;

且正常.
不是应该

@Autowired 
private DataSource masterDataSource;

吗?

阅读 4.5k
3 个回答

通过注解@Autowired注入,属于按类型注入(byType),所以你的注入不用指定名称,只有当接口有多个实现类时,容器查找到多个匹配的bean时才需要指定名称,使用@Qualifier,像下面这样:

@Autowired
@Qualifier("masterDataSource")
 private DataSource dataSource;

spring 支持类型的自动注入,只要这个类型的bean只有一个就可以。

,我猜,应该是有Datasource这个接口吧。masterDataSource是实现类或继承接口

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题