我在我的所有REST微服务中使用HK2进行依赖注入。当我创建数据库访问对象(DAO)时,构造函数通常看起来像
@Inject
public ServiceDao(final DataSource dataSource) {
...
}
并且app有一个定义所有绑定的初始化块
@Override
protected void configure(ServiceConfig config, AbstractBinder binder) {
binder.bind(config.dataSource).to(DataSource.class);
binder.bind(ServiceDao.class).to(ServiceDao.class).in(Singleton.class);
}
我有一项服务,出于性能原因,需要直接访问其他服务的数据库。我知道我可以修改每个DAO以获得@Named
数据源
public ServiceADao(final @Named("ServiceADataSource") DataSource) {
-
binder.bind(config.serviceADataSource)
.named("ServiceADataSource")
.to(DataSource.class);
但是,有没有什么办法可以指定每个DAO应该使用哪个DataSource,而无需修改DAO代码本身? (仅使用我在配置块中可用的AbstractBinder
?)