您需要从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取代,我找不到我所描述的任何示例。