如何在Guice 4.0

时间:2017-01-27 16:07:03

标签: java binding polymorphism guice dropwizard

我有这样的课程,如下工作正常

@Singleton
public class EmpResource {

private EmpService empService;

@Inject
    public EmpResource(EmpService empService) {
        this.empService=empService;
    }

}

public class EmpService {

public void getName(){..}

}

现在我不得不直接使用EmpService,而是创建一个接口,EmpService实现该接口如下。

public interface IEmpService{
 void getName();
}

public class EmpServiceImpl implements IEmpService {
public void getName(){...}
}

所以现在我的资源类必须使用该接口,但我不知道如何引用它必须使用的实现。

@Singleton
public class EmpResource {

private IEmpService empService;

@Inject
    public EmpResource(IEmpService empService) {
        this.empService=empService;
    }

}

我见过this,我不确定绑定应该去哪里。 (这是我与Guice有关的第一个项目,所以我是一个新手)。

这是出现的错误“com.api.EmpService没有实现绑定。”这完全可以理解但不确定如何修复它。 我知道你的帮助。

仅供参考:我正在使用Dropwizard应用程序。

2 个答案:

答案 0 :(得分:2)

您可以将模块配置为:

public class YourModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(EmpService.class).to(EmpServiceImpl.class);
        // ....
    }
}

答案 1 :(得分:0)

您还必须为EmpServiceImpl类添加Provide Methode

public class MyModule  extends AbstractModule {

    @Override
    protected void configure() {
             bind(IEmpService.class).to(EmpServiceImpl.class);
    }

    @Provides
    EmpServiceImpl provideEmpServiceImpl()  {
        // create your Implementation here ... eg.
        return new EmpServiceImpl();
    } 

}