Мы используем HK2 в качестве нашей структуры внедрения зависимостей через dropwizard, следовательно, jersey 2.0. С обновлением dropwizard 2.0, кажется, появилась новая функция для Необязательные параметры .
Это сломало использование нашего внедрения различных строк конфигурации, некоторые необязательные, некоторые нет.
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) {
Итак, раньше это работало на нас. Но теперь, с дополнительным изменением, если 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
в String.class
, но вызов сразу прервался.