任何读取属性文件的API,不需要Spring以注释的方式



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

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

我无法找到任何解决方案没有使用spring

我想出了一个快速的方法来绑定属性,如下所示:

注意:它没有被优化,没有错误处理。

@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

相关内容

  • 没有找到相关文章

最新更新