Вы должны будете реализовать что-то вроде одноэлементного PortAllocator, который бы отслеживал уже выделенные порты.Затем вы можете вставить это в свой клиент:
@Inject
SocketClient(PortAllocator portAllocator) {
this.port = portAllocator.allocatePort();
}
PortAllocator может выглядеть примерно так:
@Singleton
class PortAllocator {
private int nextPort = 1234;
int allocatorPort() {
return nextPort++;
}
}
Вы можете отсоединиться, используя интерфейс, если хотите.Возможно, вам захочется подумать и о безопасности потоков.
Вы можете возразить, что здесь вы мало пользуетесь Guice, но вы получаете встроенное управление одноэлементным состоянием, а отсутствие статики делает тестированиелегко.