当XML文件中添加了default-autowire="byName"时,会自动为属性注入同名的bean实例,即使为该属性显式指定了一个ref也不生效。
<bean id="updateADbUser" class="xxx.UpdateADbUser">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="updateBDbUser" class="xxx.UpdateBDbUser">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
<constructor-arg index="0" ref="dataSource"/>
</bean>
<bean id="newJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
<constructor-arg index="0" ref="newDataSource"/>
</bean>
<bean id="dataSource" class="xxx.DataSource">
<property name="logicDBName" value="${DB_100}" />
</bean>
<bean id="newDataSource" class="xxx.DataSource">
<property name="logicDBName" value="${DB_108}" />
</bean>
以上配置文件中,其实两个数据库的操作类操作的数据源都是DB_100。因为其实updateBDbUser其实注入的也是jdbcTemplate而不是newJdbcTemplate
在开启了自动装配的情况下,命名规范是十分重要的,同一个类有多个实例的情况下,建议不要有实例用类名做实例名