java—是否可以从hk2的属性文件中动态管理@named injection name

tvokkenx  于 2021-07-04  发布在  Java
关注(0)|答案(1)|浏览(434)

我们有一个核心java应用程序和不同客户机的不同插件。我们正在使用hk2进行依赖注入。
我现在想知道是否有可能将一些@named限定符名称放入插件的属性文件中,这样我就可以更改属性文件的值,为不同的客户机注入不同的类实现。
我的意思是有@named(key=“plugins.impl.xplugin”)而不是@named(“xplugin”)。
这将有助于摆脱这么多的样板代码插件。

c86crjj0

c86crjj01#

这是使用iterableprovider(其上有一个“named”方法,用于在运行时选择特定的命名版本)的可能解决方案:

@Service
public class Example {

    @Inject
    private IterableProvider<MyService> myService;

    public MyService getSpecificService(String serviceName) {
        return myService.named(serviceName).get();
    }

    @Contract
    public interface MyService {}

    @Service @Named("Foo")
    public static class MyServiceFoo implements MyService {}

    @Service @Named("Bar")
    public static class MyServiceBar implements MyService {}

}

在上面的示例中,您只需将所需服务的名称(“foo”或“bar”)传递给getspecificservice,它将传回您选择的实现。
注意:如果给定的服务没有实现给定的名称,那么真正的代码可能希望更复杂地了解会发生什么。

相关问题