将Google Guice的AssistedInject与JAXB一起使用

时间:2013-06-29 20:40:34

标签: java dependency-injection jaxb guice

在我的一个项目中,我使用Guice进行依赖注入。我的模型中的一个类使用Guice的AssistedInject来注入某种实现特定接口的管理器:

public final class A_Class {
    private final String string;
    private final ManagerInterface interface;

    @Inject
    public A_Class(@Assisted String string, ManagerInterface interface) {
        ...
    }

    // getters, equals, hashCode, toString, etc.
}

当然,我只有A_Class来创建String的实例,我有一个这样的工厂接口:

public interface A_Factory {

    A_Class create(String s);
}

此项目的后续步骤之一是将A_Class的实例存储为XML,并通过读取XML文件来创建实例。对于那部分,我想使用JAXB库。正如({3}}中所讨论的那样,您不能在XML进程中使用A_Class,因为它没有空构造函数。在我刚才提到的主题中讨论了我对此做了什么。我做了以下课程:

public class A_Class_Adaptee {

    private String s;

    @XmlElement
    public String getS() {
        return this.s;
    }

    public void setS(String s) {
        this.s = s;
    }
}

以及JAXB XmlAdapter的子类,称为A_Class_Adapter。现在出现了问题:为了实现其unmarshal()方法,我需要访问创建A_Class实例的工厂接口。但由于A_Class_Adapter不能有带参数的构造函数,我无法注入该工厂接口。要清楚,我基本上想要的是这样的:

public class A_Class_Adapter extends XmlAdapter<A_Class_Adaptee, A_Class> {

    @Override
    public A_Class unmarshal(A_Class_Adaptee adaptee) {
        return factory.create(adaptee.getS());
    }

    @Override
    public A_Class_Adaptee marshal(A_Class aClass) {
        A_Class_Adaptee adaptee = new A_Class_Adaptee();
        adaptee.setS(aClass.getS());
        return adaptee;
    }
}

但我不知道如何注入由Guice创建的factory - 接口。

有没有人能解决这个问题?或者我在想错误的方向,还有另一种方法来实现我的阅读XML目标吗?谢谢!

0 个答案:

没有答案