gpt4 book ai didi

java - 引导并限制客户端仅获取某些实例

转载 作者:行者123 更新时间:2023-12-01 11:54:44 25 4
gpt4 key购买 nike

使用 Guice 时,如何限制客户端从特定的类组(又名 the Facebook problem )获取实例?

想象一下我使用 ports-and-adapters 构建我的系统我有一个管理适配器端、一个业务逻辑组件和一个由业务组件使用的数据访问端。如何允许客户端仅获取管理适配器端的接口(interface)实例?

在代码中:

管理适配器:

public interface Admin { /* ... */ }

class AdminImpl implements Admin {
@Inject
AdminImpl(BusLogic bl) { /* .... */ }
/* ... */
}

业务逻辑:

public interface BusLogic { /* ... */ }

我想让应用程序级别的注入(inject)器仅返回Admin接口(interface)的实例。

谢谢

最佳答案

啊,PrivateModule 是一个答案。应用级别的一个 PrivateModule 仅公开 Admin 界面:

public class PrivateModuleTest {
public static interface Admin {}

public static class AdminImpl implements Admin {
@Inject
public AdminImpl(BusLogic x) {}
}

public static interface BusLogic {}

public static class BusLogicImpl implements BusLogic {}

public static class AdminModule extends AbstractModule {
@Override
protected void configure() {
bind(Admin.class).to(AdminImpl.class);
}
}

public static class BusLogicModule extends AbstractModule {
@Override
protected void configure() {
bind(BusLogic.class).to(BusLogicImpl.class);
}
}

public static class AppModule extends PrivateModule {
@Override
protected void configure() {
install(new AdminModule());
expose(Admin.class); // <---- clients may instantiate only this type

install(new BusLogicModule());
}
}

@Test
public void exposeAdmin() {
Guice.createInjector(new AppModule())
.getInstance(Admin.class);
}

@Test(expected = ConfigurationException.class)
public void doNotExposeBusLogic() {
Guice.createInjector(new AppModule())
.getInstance(BusLogic.class);
}
}

关于java - 引导并限制客户端仅获取某些实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28532658/

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