球衣2. *。如何替换Jersey 1. *的InjectableProvider和AbstractHttpContextInjectable

【字号: 日期:2024-02-23浏览:43作者:雯心
如何解决球衣2. *。如何替换Jersey 1. *的InjectableProvider和AbstractHttpContextInjectable?

您需要从HK2 实现InjectionResolver接口。看一下Jersey工作区中存在的现有实现:

ContextInjectionResolver处理@ContextParamInjectionResolver处理@PathParam、、@QueryParam…(通过其子类)AutowiredInjectResolver处理@Autowired

一旦有了这个,您需要从HK2扩展AbstractBinder并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');解决方法

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

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

相关文章: