【发布时间】:2019-05-21 19:32:52
【问题描述】:
我的目标是围绕系统注入解析器添加一些额外的逻辑(可以说是装饰它)。基本上,我想注册一个自定义注入解析器(例如描述 here),但要注册 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(在此同时调用构造函数和解析方法)
有人知道如何解决这个问题吗?
使用的版本:球衣 2.27
编辑:当我@Inject InjectionResolver 本身时,似乎为org.glassfish.hk2.api.InjectionResolver 注入了hk2 的org.jvnet.hk2.internal.ThreeThirtyResolver,而为org.glassfish.jersey.internal.inject.InjectionResolver 注入了我的自定义注入解析器。但是,自定义注入解析器不用于注入。
【问题讨论】:
-
您是否尝试过将 javax 注入的 InjectionResolver 的等级设置为 > 0 ?这将迫使它被用于支持提供的系统
-
@jwells131313 是和否。我尝试了错误的配置,并在我有正确的配置时删除了
@Rank...当我使用org.glassfish.hk2.api.InjectionResolver时确实有效,我想通了其余的部分。非常感谢。 -
您能否发布您在配置中修复的内容,以便这个问题有答案?谢谢
标签: jersey jersey-2.0 hk2