Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何转移到XML配置_Java_Xml - Fatal编程技术网

Java 如何转移到XML配置

Java 如何转移到XML配置,java,xml,Java,Xml,我需要将一些应用程序配置类迁移到XMLs。这些类主要有枚举,其他类使用这些枚举。这些枚举在我们的应用程序中广泛使用。 例如,我们有这样的课程 enum ColumnType{ type1("Type1"),type2("type2"),type3("type3") } 我们还需要这些类型来实例化类。 比如说, Processor p = new StringValueProcessor(ColumnType.type1); 如何在不更改应用程序中的依赖

我需要将一些应用程序配置类迁移到XMLs。这些类主要有枚举,其他类使用这些枚举。这些枚举在我们的应用程序中广泛使用。 例如,我们有这样的课程

    enum ColumnType{
        type1("Type1"),type2("type2"),type3("type3")
    }
我们还需要这些类型来实例化类。 比如说,

    Processor p = new StringValueProcessor(ColumnType.type1);
如何在不更改应用程序中的依赖项的情况下将其移动到XML文件中

编辑: 保留这些枚举不是强制性的,我不想针对从xml创建的类编译代码。配置需要是动态的,这就是迁移到XML的全部意义,这样我们就可以在XML中配置东西,而无需编译和重新部署。 我主要关心的是能够将所有列类型的实例限制为一个,并使它们在整个应用程序中都可以访问

编辑:在考虑了一段时间的设计之后,我已经缩小到两个基本要求。 1) 我将用一些属性定义一些xml标记,并需要将其转换为对象 2) 我还将定义一些标记(web.xml中定义servlet的方式),并需要初始化相应的类 3) 我将进一步定义一些映射标记,它们将在步骤1)中创建的对象映射到在步骤2)中初始化的实例。这应该转换为java HashMap,在java HashMap中,步骤1)中定义的对象只能有一个实例,但对于每个映射,步骤2)中定义的对象将有一个新实例。
是否有一个框架可以提供这种开箱即用的功能?

您可以使用XML文件生成枚举。这必须在编译/构建时完成,或者不能像第二个示例那样在代码中使用它们(因为它们在编译时不存在)


为什么要将枚举迁移到XML?

我认为您需要的答案是使用。它允许您将XML转换为POJO,反之亦然。它甚至有一些使用枚举的功能。您所要做的就是在java中添加一些注释,这样就可以在XML之间进行转换


通过使用注释,您不会影响任何现有功能。

我们的目标是使应用程序足够灵活,无需重新编译和部署即可进行配置。如果不选择编译,那么解决方法是什么?也许我们可以创建这些类型的实例,然后将它们传递给像StringValueProcessor这样的类?您可以动态地这样做,但是问题是您不能在编译的代码(因为它们在编译时不存在)和使用这些“枚举”的代码中引用它们还必须动态编译。我不必将它们保留为枚举。我可以将这些作为常规类,但我无法理解如何使用这些实例初始化我的类,以及如何只保留每个列类型的一个实例并在整个应用程序中共享它们。通过将它们创建为
公共静态final
变量并生成构造函数,您可以将它们仅作为一个实例
private
但是,如果生成代码,我不明白为什么您不使用
enum
s,因为它们通常更简单。我不能生成代码,因为生成的代码需要编译和重新部署,这违背了移动到XMLs的全部目的。我需要创建类型实例,这将在其他地方使用。我已据此对问题进行了编辑。