java - HK2 命名可选常量参数
问题描述
我们通过 dropwizard 使用 HK2 作为我们的依赖注入框架,因此使用 jersey 2.0。随着 dropwizard 2.0 的升级,似乎有了Optional parameters的新功能。
这破坏了我们注入各种配置字符串的使用,有些是可选的,有些不是。
bind(configuration.getFilesLocation()).to(String.class).named("filesLocation");
bind(configuration.getGeoIpPath()).to(new TypeLiteral<Optional<String>>() {
}).named("geoIpPath");
...
public GeoIpUtil(@Named("geoIpPath") Optional<String> geoIpPath) {
所以,这曾经对我们有用。但是现在,通过 Optional 更改,如果configuration.getGeoIpPath()
是Optional.empty()
,那么GeoIpUtil
该类将获得configuration.getFilesLocation()
价值。因此,看起来当找不到命名注入时,HK2 注入了任何String
绑定。所以即使我将代码更改为正确的方式
if (configuration.getGeoIpPath().isPresent()) {
bind(configuration.getGeoIpPath().get()).to(String.class).named("geoIpPath");
}
HK2 仍将注入filesLocation
.
有什么办法可以在不引入新类或传递整个configuration
对象的情况下解决这个问题?也许是一种让 HK2 严格检查命名绑定的方法?
我尝试注入null
to String.class
,但通话立即崩溃。
解决方案
事实上,hk2 的可选注入功能似乎存在一些错误,这些错误已在此处修复https://github.com/eclipse-ee4j/glassfish-hk2/pull/516并且应该是未来版本的一部分
推荐阅读
- javascript - 我不能用 src="" 在我的 html 中引用 javascript
- join - 如果有两个以上的表,分桶如何帮助。(Hive 排序合并桶连接)
- javascript - console.log 在 react 和 graphql 中不起作用
- python - 嵌套for循环不断重复
- sql-server - 字符串 ')' 后的非闭合引号 - OPENQUERY
- python - Django Form 某些字段总是在 clean_field() 或 clean() 中得到 None
- perl - 如何检查 cidr 值是否有效
- c# - Encoding.GetString() 仅返回字节数组中的第一个字节
- javascript - 如何检测字符串中间的两个空格?
- bash - 在 Bash 中,我应该使用声明而不是本地和导出吗?