gpt4 book ai didi

java - typesafe 的配置是否支持自定义转换器?

转载 作者:行者123 更新时间:2023-11-30 09:10:01 27 4
gpt4 key购买 nike

上下文

我想使用 Guice 自动注入(inject)配置项。我的配置框架是typesafe的config。

public class MyObject {
@Configuration("value") int value;
}

为此,我写了一个注释。

// Annotations skipped, but correct
public @interface Configuration {
String value();
}

然后我写了一个模块。该模块检查所有要注入(inject)的类型,然后允许注入(inject)本身。

public class ConfigurationModule extends AbstractModule {
@Override protected void configure() {
final Config config = ConfigFactory.load();
class ConfigurationMembersInjector<T> implements MembersInjector<T> {
private final Field field;
ConfigurationMembersInjector(Field field) {
this.field = field;
field.setAccessible(true);
}
@Override public void injectMembers(T t) {
try {
String key = field.getAnnotation(Configuration.class).value();
field.set(t, config.getXxxx()); // what to write?
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
class ConfigurationTypeListener implements TypeListener {
@Override public <T> void hear(TypeLiteral<T> typeLiteral, TypeEncounter<T> typeEncounter) {
for (Field field : typeLiteral.getRawType().getDeclaredFields()) {
if (field.isAnnotationPresent(Configuration.class)) {
typeEncounter.register(new ConfigurationMembersInjector<T>(field));
}
}
}
}
bindListener(Matchers.any(), new ConfigurationTypeListener());
}
}

问题

如何自动将配置项转换为特定但未知的类型?有没有办法说“我想把这个项目转换成这种类型”?另外,有没有办法“注册”自定义转换器?

否则,我是否必须自己编写转换机制?

最佳答案

另一种替代方法是使用 Classpath scanner扫描您的自定义注释(我假设是 Binding Annotation ),然后将您的配置值绑定(bind)到那些用这些注释注释的类型。

这正是我开发我的库所采用的方法:Typesafe Config Guice ,它绑定(bind)来自 Typesafe Config 的配置值文件到带注释的参数和字段。

关于java - typesafe 的配置是否支持自定义转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22718335/

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