我在创建两个相同类但限定符名称不同的 bean 时遇到问题。基本上,一个 bean 是使用 @Repository 注释创建的,另一个是在 @Configuration 类中创建的。
这是我们不会使用不同数据源的两个实例的类:
@Repository ("someDao")
public class SomeDaoImpl implements SomeDao {
private NamedParameterJdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(DataSource dataSource) {
jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
}
然后我们有这样的服务:
@Service
public class SomeServiceImpl implements
SomeService {
@Resource(name = "someDao")
private SomeDao someDao;
@Resource(name = "someDaoAnotherDataSource")
private SomeDao someDaoAnotherDataSource;
}
我的第一个 bean 是由注释 @Repository 创建的,另一个是我在 Spring Configuration 类中声明的:
@Configuration
@ComponentScan(basePackages = "mypackages")
public abstract class ApplicationRootConfiguration {
@Bean(name = "otherDataSource")
public DataSource otherDataSource() throws NamingException {
...
}
@Bean(name = "someDaoAnotherDataSource")
public SomeDao getSomeDaoAnotherDataSource(@Qualifier("otherDataSource")
DataSource dataSource) throws NamingException {
SomeDao dao = new SomeDaoImpl();
dao.setDataSource(dataSource);
return dao;
}
}
如果我运行我的应用程序,SomeServiceImpl 中的属性 someDaoAnotherDataSource 没有在配置类中声明我的 bean,它使用注释存储库声明了 bean。
此外,如果我在 XML 配置中运行相同的示例,它可以工作:
<bean id="someDaoAnotherDataSource" class="SomeDaoImpl">
<property name="dataSource" ref="otherDataSource" />
</bean>
知道为什么不自动装配正确的bean吗?
提前致谢。