gpt4 book ai didi

java - Jersey 2.*.如何替换 Jersey 1.* 的 InjectableProvider 和 AbstractHttpContextInjectable

转载 作者:IT老高 更新时间:2023-10-28 21:00:21 26 4
gpt4 key购买 nike

我想创建一个类,其对象可以使用 @Context 注释(或者更好的自定义注释,用于我需要将参数传递给注释的情况)注入(inject)资源方法.在 Jersey 1.* 中,我会使用 InjectableProvider(在我的情况下与 AbstractHttpContextInjectable 一起使用)。我想要实现的是类似于 @Auth [ 1 ] 来自 dropwizard(使用 Jersey 1.7)。

据我所知, Jersey 的注入(inject)功能已被 HK2 取代,我找不到任何我所描述的例子。

编辑:见 this question了解我在尝试遵循 Michal 的指南时遇到的更多问题。

最佳答案

你需要实现InjectionResolver<T> HK2接口(interface)。查看 Jersey 工作区中的现有实现:

一旦你有了这个,你需要扩展AbstractBinder来自 HK2 并通过它的 #configure() 方法绑定(bind)您的 InjectionResolver:

public class MyResolverBinder extends AbstractBinder {

@Override
protected void configure() {
bind(MyInjectionResolver.class)
.to(new TypeLiteral<InjectionResolver<MyAnnotation>>() {})
.in(Singleton.class);
}
}

...并在您的应用程序类中注册此绑定(bind)器的实例(或通过 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;
}
}

ResourceConfig

中注册 MyResolverBinderFeature
new ResourceConfig()
// Register either MyFeature
.register(MyFeature.class)
// or MyResolverBinder
.register(new MyResolverBinder())
// Register other providers or resources
.packages("my.package");

关于java - Jersey 2.*.如何替换 Jersey 1.* 的 InjectableProvider 和 AbstractHttpContextInjectable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18463311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com