gpt4 book ai didi

java - 绑定(bind)多个实现,具体取决于主机类

转载 作者:行者123 更新时间:2023-12-01 14:19:06 24 4
gpt4 key购买 nike

我有两个接口(interface):UserServiceProjectService。它们每个都有一个特定的实现类,分别名为UserServiceImplProjectServiceImpl。还有一个 WorkflowManagementService 类,它实现上述两个接口(interface),并充当它们具体实现的代理。它还在上面做了更多的事情。

WorkflowManagementService 被注入(inject)具体的 UserServiceProjectService 实例。不过,对于应用程序的其余部分,只要有人需要 UserSerivceProjectService 实例,就应该提供 WorkflowManagementService

如果要将它们注入(inject)到 WorkflowManagementService 中,如何使注入(inject)器提供 UserServiceImpl 和 ProjectServiceImpl,以及 WorkflowManagementService 中的任何内容其他引用?

最佳答案

我不知道如何根据类上下文执行此操作,但您可以使用绑定(bind)注释来执行此操作:

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);
}
}
}

完成代码原型(prototype)设计后,您可能希望使用实际的注释而不是 @Named

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com