泽西岛:在资源配置中使用@Inject



我有一个配置.java单例类(文件加载了许多属性),我想在应用程序中的某些类中注入它。

因此,我使用 AbstractBinder 绑定了 ResourceConfig 类中的注入。

现在,我需要在此资源配置中使用此配置类。

例如,在我的配置类中有一个名为"packages"的属性,我必须在 ResourceConfig 类中使用它才能注册包。

问题是注入不是在 ResourceConfig 类中开始的。

class Configuration {
    //many properties
    String packages = "";
}
class MyResourceConfig extends ResourceConfig {
    @Inject
    Configuration configuration;
    MyResourceConfig() {
       ...
       register(MyBinder.class); //with many injection
       ...
       packages(configuration.packages); 
   }
}

那么,您能否建议我如何拥有此生命周期?(也许我必须使用另一个球衣类?

我意识到这是一种解决方法,但您可以通过对 CDI 单例对象的静态访问来实现它。

像这样:

@ApplicationPath("/rest")
public class RestApplication extends ResourceConfig {
    public RestApplication() {
        super();
        super.packages(true, "com.package.name");
        register(JacksonFeature.class);
        register(JacksonObjectMapperProvider.class);
        ModelConverters.getInstance().addConverter(
                    new CustomObjectMapperModelResolver(getObjectMapperProvider()));
                               // get the instance here ^
        OpenApiResource openApiResource = new OpenApiResource();
        register(openApiResource);
        AcceptHeaderOpenApiResource ahoar = new AcceptHeaderOpenApiResource();
        register(ahoar);
    }
    private static JacksonObjectMapperProvider getObjectMapperProvider() {
        return CDI.current().select(JacksonObjectMapperProvider.class).get();
    }
}                                       

最新更新