gpt4 book ai didi

java - 如何根据注释值动态创建类的实例?

转载 作者:行者123 更新时间:2023-12-01 19:27:26 25 4
gpt4 key购买 nike

我有一堆实现接口(interface)Job的类。每个类都有一个注解 @Work(name="对应的名称")

每个类都有不同的私有(private)字段,这些字段在构造过程中使用 guice 注入(inject)。现在我想创建一个读取配置文件的映射 Map,如下所示

- name: "test1"
worker_annotation = "annotation1"
- name: "test2"
worker_annotation = "annotation2"
- name: "test3"
worker_annotation = "annotation3"

所以这个模块需要做的就是读取这个配置文件,获取所有带有@Work注解的类,并创建一个映射Map,其中键字符串对应配置文件中的名称,Job是对应实现的类Job接口(interface)并标注对应的Worker注解。

最佳答案

我要提供的解决方案有一个限制,即它仅在您的所有工作类别都属于不同类型(=类别)的情况下才有效,并且据我从您的描述中可以假设的情况来看,情况确实如此。否则,您需要引入键,以便 Guice 能够区分相同的类型。

你的例子听起来像是 MapBinder 的工作Guice 的 multibindings扩展名。

我可以想到类似以下代码(未经测试):

// code in some Guice module configure() method
...
SomeConfig config = loadConfig(); // I invented this config code. Adapt!
...
MapBinder<String, Job> mapbinder
= MapBinder.newMapBinder(binder(), String.class, Job.class);
for(String name : config.allNames()) {
String workerName = config.lookUpWorkerName(name); // not Guice-related
Class<?> clazz = lookUpJobClassFromAnnotationName(workerName); // not Guice-related either
mapbinder.addBinding(name).to(clazz); // name must be unique
}

然后在其他一些类中,您可以注入(inject) Map<String, Job>它包含每个键对应的类实例。

进一步阅读有关 Guice 和配置的内容

我有一个类似的用例,尽管实例化依赖关系图更复杂,该依赖关系图根据配置而变化。我总结为document如果您有兴趣,请将我的用例与您的进行比较。

关于java - 如何根据注释值动态创建类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59296528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com