Моя цель - добавить некоторую дополнительную логику вокруг System Injection Resolver (так сказать, для его украшения).По сути, я хочу зарегистрировать пользовательский распознаватель инъекций (например, описанный здесь ), но для аннотации javax.inject.@Inject
.Настройка работает, если я создаю другую пользовательскую аннотацию, но не при использовании @Inject.Моя реализация выглядит следующим образом:
Решение для инъекций:
@Singleton
@Rank(Integer.MAX_VALUE)
public class InjectInjectionResolver
implements InjectionResolver<Inject> {
private final InjectionResolver<Inject> injectionResolver;
@Inject
public InjectInjectionResolver(
@Named(InjectionResolver.SYSTEM_RESOLVER_NAME) final InjectionResolver<Inject> injectionResolver) {
this.injectionResolver = injectionResolver;
}
@Override
public Object resolve(final Injectee injectee, final ServiceHandle<?> root) {
throw new RuntimeException("Why is this never called?");
}
@Override
public boolean isConstructorParameterIndicator() {
return injectionResolver.isConstructorParameterIndicator();
}
@Override
public boolean isMethodParameterIndicator() {
return injectionResolver.isMethodParameterIndicator();
}
}
И я регистрирую распознаватель следующим образом (внутри ResourceConfig
):
register(new AbstractBinder() {
@Override
protected void configure() {
bind(InjectInjectionResolver.class).to(new GenericType<InjectionResolver<Inject>>() {}).in(Singleton.class);
}
});
Что я пробовалдо сих пор:
- с использованием
@Rank
- с использованием
org.glassfish.jersey.internal.inject.AbstractBinder
или org.glassfish.hk2.utilities.binding.AbstractBinder
с TypeLiteral
, наряду с реализацией org.glassfish.hk2.api.InjectionResolver
или org.glassfish.jersey.internal.inject.InjectionResolver
- убедившись, что та же самая установка работает с @CustomAnnotation (где вызываются и конструктор, и методы разрешения)
Кто-нибудь знает, как решить эту проблему?
Версииused: jersey 2.27
EDIT: Когда я @ Inject сам InjectionResolver, кажется, что hk2 org.jvnet.hk2.internal.ThreeThirtyResolver
вводится для org.glassfish.hk2.api.InjectionResolver
, в то время как мой пользовательский преобразователь инъекций вводится для org.glassfish.jersey.internal.inject.InjectionResolver
.Однако пользовательский распознаватель инъекций используется для , а не для инъекций.