HK2 по имени Необязательный постоянный параметр - PullRequest
0 голосов
/ 03 октября 2019

Мы используем 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, но вызов сразу прервался.

...