gpt4 book ai didi

java - 任何以注释方式在没有Spring的情况下读取属性文件的API

转载 作者:行者123 更新时间:2023-11-30 07:59:08 25 4
gpt4 key购买 nike

没有在我的应用程序中使用 Spring。是否有任何 API 可以根据注释将属性文件加载到 java pojo 中。我知道使用 InputStream 或 Spring 的 PropertyPlaceHolder 加载属性文件。是否有任何 API 可以用来填充我的 pojo

@Value("{foo.somevar}")
private String someVariable;

如果不使用 spring,我无法找到任何解决方案。

最佳答案

我想出了一个快速的 hack 来绑定(bind)属性,如下所示。

注意:它没有优化,没有错误处理。只是展示一种可能性。

@Retention(RetentionPolicy.RUNTIME)
@interface Bind
{
String value();
}

我已经测试了它的一些基本参数并且正在运行。

class App
{
@Bind("msg10")
private String msg1;
@Bind("msg11")
private String msg2;

//setters & getters
}

public class PropertyBinder
{

public static void main(String[] args) throws IOException, IllegalAccessException
{
Properties props = new Properties();
InputStream stream = PropertyBinder.class.getResourceAsStream("/app.properties");
props.load(stream);
System.out.println(props);
App app = new App();
bindProperties(props, app);

System.out.println("Msg1="+app.getMsg1());
System.out.println("Msg2="+app.getMsg2());

}

static void bindProperties(Properties props, Object object) throws IllegalAccessException
{
for(Field field : object.getClass().getDeclaredFields())
{
if (field.isAnnotationPresent(Bind.class))
{
Bind bind = field.getAnnotation(Bind.class);
String value = bind.value();
String propValue = props.getProperty(value);
System.out.println(field.getName()+":"+value+":"+propValue);
field.setAccessible(true);
field.set(object, propValue);
}
}
}
}

在根类路径中创建 app.properties

msg10=message1
msg11=message2

关于java - 任何以注释方式在没有Spring的情况下读取属性文件的API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39645492/

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