相关疑难解决方法(0)

使用自定义hk2 InjectionResolver注入应用程序配置

我上一个问题的后续行动.我正在尝试使用JSR-330标准注释和与泽西捆绑的HK2框架注入应用程序配置数据.

理想情况下,我想InjectionResolverNamed注释创建一个自定义,它将在一个MapProperties对象中查找所需的值,我将从其他地方读取的数据中填充.在我的第一次尝试中,我创建了一个Application

public class MyApplication extends ResourceConfig {
    ...
    packages(MY_PACKAGES);
    property(MY_CONFIG_PROPERTY, someValue);
    register(new AbstractBinder() {
        @Override
        protected void configure() {
            bind(ConfigurationInjectionResolver.class)
            .to(new TypeLiteral<InjectionResolver<Named>>(){})
            .in(Singleton.class)
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

然后我的InjectionResolver样子

public class ConfigurationInjectionResolver implements InjectionResolver<Named> {
    @Context Application application;

    @Override
    public Object resolve(Injectee injectee, ServiceHandle<?> serviceHandle) {
        // lookup data in application.getProperties();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题application.getProperties()是空的.知道什么是错的吗?另外,我可以绑定我的Injector实例而不是绑定类吗?这样我就可以构造将我的Map数据作为参数传递的实例.

java dependency-injection jersey-2.0 hk2

5
推荐指数
1
解决办法
3813
查看次数

泽西HK2依赖注射

我正在编写一个公开REST API的简单微服务.所以我开始与泽西岛合作,当然我需要将我的对象注入球衣资源.基本上我有2个类定义了一组资源,其中一些需要使用另一个服务.

基本上我有:

public interface MyService {

String getServiceName();

void doService();
Run Code Online (Sandbox Code Playgroud)

}

此接口的2个实现(MyServiceBean和MyAlternativeServiceBean)

而且,据我所知阅读球衣文件,我定义了一个hk2 Binder:

public class MyBinder implements Binder{

@Override
public void bind(DynamicConfiguration config) {

    DescriptorImpl descriptor = BuilderHelper.link(MyServiceBean.class).named("MyServiceBean").to(MyService.class).build();
    config.bind(descriptor);


    config.bind(BuilderHelper.link(MyAlternativeServiceBean.class).named("MyAlternativeServiceBean").to(MyService.class).build());

}
Run Code Online (Sandbox Code Playgroud)

我将此绑定程序注册到ApplicationConfig类

public class ApplicationConfig extends ResourceConfig{

public ApplicationConfig(){
    property("property.value", "MyAlternativeServiceImplementation");
    registerInstances(new MyBinder());
}
Run Code Online (Sandbox Code Playgroud)

}

并正确注释到资源中

@Path("first")
    public class First {

        @Inject @Named(value = "MyServiceBean")
        private MyService myService;
    //...
    }

    @Path("second")
    public class Second {

        @Inject @Named(value = "MyAlternativeServiceBean")
        private MyService myService;
    //...
    }
Run Code Online (Sandbox Code Playgroud)

一直有效,直到MyService实现没有args构造函数.但在一种情况下,我还需要为MyAlternativeServiceBean提供依赖.

这是构造函数

@Inject @Named("property.value") …
Run Code Online (Sandbox Code Playgroud)

java rest dependency-injection jersey-2.0 hk2

2
推荐指数
1
解决办法
4781
查看次数

标签 统计

dependency-injection ×2

hk2 ×2

java ×2

jersey-2.0 ×2

rest ×1