在现有项目上实施Guice

时间:2015-11-18 20:38:38

标签: java guice

我目前正试图在我的resteasy解决方案中实施Guice。 使用静态方法8个月后...我不得不改变以实现正确的单元测试。 我成功地引导了一小段代码工作。而且我完全理解DI过程。

我希望通过业务逻辑进一步实施,但我已经陷入困境,而且我不知道如何通过Guice实现这一点。

我的应用程序有一个单例名称Metamodel,用于Guice的示例构建并包含Element的映射

有我的Metamodel

@Singleton
public class MetamodelImpl implements Metamodel{
    Map<String, Element> elements;

    public MetamodelImpl(){
        // load data from XML files in order to create my Elements
        // using new Element1() etc... function of the type.
    }

    public Element getElement(String name){
        return elements.get(name);
    }
}

然后,这是我的Element抽象类,Element可以包含其他元素,目的是调用generateResult以生成RestWrapper(json结果,但我们不要卡尔)。

public abstract class Element{
    List<Element> elements;

    public RestWrapper generateResult(Context context){
        RestWrapper restWrapper = new RestWrapper();

        for (Element element : elements) {
            restWrapper.add(element.generateResult(context));
        }

        return restWrapper;
    }
}

有一个实施的例子。

public class Element1{
    public RestWrapper generateResult(Context context){

        RestWrapper restWrapper = super.generateResult(context);

        // Add some custom logic using services
        // old code with static use
        Object object = ServiceExample.getResult(property, context);

        // Wanted, by injecting the service, but I can't inject service on element that I create...

        Object object = serviceExampleImpl.getResult(property);
    }
}

Context是一个Guice对象,包含我当前的用户和其他一些东西。我可能会看到我的问题是在元素的generateResult方法上,我必须调用一些现在已经实现Guice的服务。例如:

public class ServiceExampleImpl implements ServiceExample{
    @Inject
    Context context;

    public Object getResult(String property){
        return ...
    }
}

我该怎么办?如何使用Guice构造元素?并使上下文动态...

0 个答案:

没有答案