我有两个接口:UserServiceProjectService。它们每个都有一个特定的实现类,分别命名为UserServiceImplProjectServiceImpl。还有一个WorkflowManagementService类,该类实现上述两个接口,并作为其具体实现的代理。它还在顶部执行更多操作。

WorkflowManagementService被注入具体的UserServiceProjectService实例。但是对于其余的应用程序,只要有人需要UserSerivceProjectService实例,就应该提供WorkflowManagementService

如果要在UserServiceImpl中注入WorkflowManagementService和ProjectServiceImpl,并且如何将它们插入WorkflowManagementService中以供其他参考,我该如何使它们提供?

最佳答案

我不知道基于类上下文执行此操作的方法,但是可以使用绑定批注来执行此操作:

public class Example {

  static interface UserService {}
  static interface ProjectService {}

  static class UserServiceImpl implements UserService {}
  static class ProjectServiceImpl implements ProjectService {}

  static class WorkflowManagementService implements UserService, ProjectService {
    @Inject
    @Named("concrete")
    UserService userService;

    @Inject
    @Named("concrete")
    ProjectService projectService;
  }

  static class Module extends AbstractModule {
    @Override
    protected void configure() {
      bind(UserService.class).to(WorkflowManagementService.class);
      bind(ProjectService.class).to(WorkflowManagementService.class);
      bind(UserService.class).annotatedWith(Names.named("concrete")).to(UserServiceImpl.class);
      bind(ProjectService.class).annotatedWith(Names.named("concrete")).to(ProjectServiceImpl.class);
    }
  }
}


在完成代码原型制作后,您可能想使用实际的注释而不是@Named

关于java - 绑定(bind)多个实现,具体取决于主机类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17804853/

10-12 04:36