如何将外部参数传递给SimpleXML创建的对象

时间:2013-06-04 00:06:26

标签: java simple-framework

我将配置直接反序列化为对象层次结构。某些对象具有构造函数参数,这些参数在配置中未提及,如内部接口。

E.g。配置文件:

<config>
    <strategy param="value" class="MyStrategy">
</config>

类:

class Config
{
    @ElementList(inline=true,entry="strategy")
    List<Object> strategies;
}

class MyStrategy
{
    MyStrategy(IFramework framework)
    {
    }
}

这里我有一个IFramework的实例,并且只要对象在构造函数中需要IFramework参数,就希望SimpleXML使用它。我还没有找到通过配置SimpleXML来完成上述工作的方法。

我现在实施它的方式很难看。我自己从xml节点读取所有元素,创建策略类的实例并在创建的对象上调用Persister.read()。为了使它工作,我必须使用strict = false声明Config类,以跳过由Simple反序列化的策略并添加一个虚拟&#34;类&#34;属于每个策略。

@Root(strict=false)
class Config
{
    List<Object> strategies;

    void loadStrategies(IFramework framework, Persister persister, InputNode source)
    {
        // traverse all nodes looking for "strategy"
        // create strategy (e.g. MyStrategy)
        // call persister.read(strategy, source)
    }
}

class MyStrategy
{
    @Attribute(name="class")
    String dummy;

    MyStrategy(IFramework framework)
    {
    }
}

我想知道这是否可以通过SimpleXML中的某种机制解决。 是否有可能将SimpleXML告知&#39; autowire&#39; IFramework实例到它创建的对象?

1 个答案:

答案 0 :(得分:0)

尝试使用转换器,您只需创建一个并注册它。然后,当您想要加载MyStrategy时,可以调用它。参见

http://simple.sourceforge.net/download/stream/doc/javadoc/org/simpleframework/xml/convert/RegistryStrategy.html