Ответ 1
Вам нужно реализовать интерфейс InjectionResolver < T от HK2. Взгляните на существующие реализации, которые присутствуют в рабочем пространстве Джерси:
- ContextInjectionResolver обработка
@Context
- ParamInjectionResolver обработка
@PathParam
,@QueryParam
,... (через его подклассы) - AutowiredInjectResolver обработка
@Autowired
Как только у вас есть это, вам нужно расширить AbstractBinder из HK2 и связать ваш InjectionResolver
с помощью метода #configure()
:
public class MyResolverBinder extends AbstractBinder {
@Override
protected void configure() {
bind(MyInjectionResolver.class)
.to(new TypeLiteral<InjectionResolver<MyAnnotation>>() {})
.in(Singleton.class);
}
}
... и зарегистрируйте экземпляр этого связующего в вашем классе приложения (или через feature):
Feature
:
public class MyFeature implements Feature {
@Override
public boolean configure(final FeatureContext context) {
context.register(new MyResolverBinder());
return true;
}
}
зарегистрировать MyFeature
в Application
:
public class JaxRsApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
final HashSet<Class<?>> classes = new HashSet<Class<?>>();
classes.add(MyFeature.class);
// Register other providers or resources.
return classes;
}
}
зарегистрировать MyResolverBinder
или Feature
в ResourceConfig
new ResourceConfig()
// Register either MyFeature
.register(MyFeature.class)
// or MyResolverBinder
.register(new MyResolverBinder())
// Register other providers or resources
.packages("my.package");