在我的一个项目中,我使用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目标吗?谢谢!