У меня есть проект, использующий Jersey 2.25 (с HK2 2.5-b30). Первоначально я использовал HK2-Guice Bridge. Однако в некоторых случаях это неожиданно дает сбой (в частности, случаи, когда строки аннотируются пользовательской аннотацией, настроенной в Guice, будут работать нормально, когда Guice выполняет инъекцию, но молча терпят неудачу, когда это делает HK2). Поскольку один и тот же объект может действовать по-разному в зависимости от того, как он был введен, я боюсь использовать их вместе.
Сейчас я переключаю все на использование HK2, но, к сожалению, похоже, что HK2 терпит неудачу в некоторых случаях, когда Guice преуспеет. В частности, кажется, что HK2 не любит внедрение, когда тип не был настроен явно. Guice был счастлив просто создать новый экземпляр этих классов и внедрить рекурсивно, но HK2 не очень. Например,
1. org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=TimeRangeRequestValidator,parent=GetWatchlistEventsImpl,qualifiers={},position=-1,optional=false,self=false,unqualified=null,1218743359)
Как видите, сообщение об ошибке не очень полезно. Он должен быть в состоянии создать TimeRangeRequestValidator
, который ссылается на некоторые другие объекты, все из которых Guice смог создать без проблем. Есть ли какой-то список различных поведений между HK2 и Guice, чтобы я мог отследить, почему это не работает?
Обратите внимание, что TimeRangeRequestValidator
— это класс (не интерфейс), аннотированный @Singleton
, который имеет общедоступный конструктор по умолчанию и поле, аннотированное Inject
. У Гайса не было проблем с его созданием.