Как ввести константы с помощью hk2 в майке 2.0?

Как ввести константу в какой-то класс, используя HK2 в майке? С Guice у меня мог бы быть класс вроде

public class DependsOnFoo {

    @Inject
    public DependsOnFoo(@Named("FOO") String foo) {
        ...
    }
    ...
}

и я бы настроил его в инжекторе с чем-то вроде

bind(String.class).named("FOO").toInstance(new String("foo"))

Что эквивалентно, если есть, в HK2?


person agnul    schedule 14.10.2014    source источник


Ответы (1)


Я изучаю hk2 от Guice. Честно говоря, я все еще немного в сорняках со сложностью hk2 и простотой guice. Я обнаружил, что это решение работает для меня, и оно очень похоже на конструктор Guice. Это казалось немного более прямолинейным, чем необходимость использовать ServiceLocatorUtilitiesclass.

public class IOCMockRestModule extends AbstractBinder
    bind(20000).to(Integer.class).named("MAX_REQUEST_TIMEOUT");
}

И использовать введенное значение:

@Inject
protected CustomerResource(ICustomerProvider customerProvider, @Named("MAX_REQUEST_TIMEOUT") int maxTimeoutMillis) {
person Chris Hinshaw    schedule 29.01.2015
comment
Можно ли реализовать это более гибким способом, не требующим нового bind() для каждого нового именованного значения, такого как MAX_REQUEST_TIMEOUT? Я надеюсь, что возможно что-то более гибкое, когда именованное значение можно прочитать во время выполнения и просмотреть с помощью пользовательской реализации, например, из файла свойств, переменной среды и т. д.? - person hayduke; 17.10.2017
comment
Я не думаю, что у hk2 есть эта функциональность, но вы можете посмотреть на com.google.inject.name.Names.bindProperties (Binder binder, Properties properties) guice в качестве руководства по созданию собственного. Я думаю, должно быть довольно просто перенести эту функциональность на hk2. - person Chris Hinshaw; 17.10.2017
comment
Это полезно, спасибо @Chris. Поскольку я хотел придерживаться HK2 и не вводить другую технологию, я успешно использовал пользовательскую аннотацию и InjectionResolver, чтобы получить желаемое поведение, как описано здесь stackoverflow.com/a/41436316/5661065 - person hayduke; 18.10.2017