我有两个接口:UserService
和ProjectService
。它们每个都有一个特定的实现类,分别命名为UserServiceImpl
和ProjectServiceImpl
。还有一个WorkflowManagementService
类,该类实现上述两个接口,并作为其具体实现的代理。它还在顶部执行更多操作。WorkflowManagementService
被注入具体的UserService
和ProjectService
实例。但是对于其余的应用程序,只要有人需要UserSerivce
或ProjectService
实例,就应该提供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/