Skip to content

Commit 8f70666

Browse files
committed
Change contract of StubFactory
Instead of an instance method we now use a static supports() method to determine if a factory matches a given stub type. This is better for the lifecycle since bean definitions have to be created before and factory can actually be created and autowired. It's a slightly unusual contract, but it makes it much harder to make a mistake with lifecycle, and much easier to install custom StubFactory instances (as @beans)
1 parent 0895711 commit 8f70666

File tree

14 files changed

+435
-167
lines changed

14 files changed

+435
-167
lines changed

spring-grpc-core/src/main/java/org/springframework/grpc/client/AbstractStubFactory.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,13 @@
2323

2424
public abstract class AbstractStubFactory<T extends AbstractStub<?>> implements StubFactory<T> {
2525

26-
private final Class<? extends AbstractStub<?>> baseType;
27-
28-
@SuppressWarnings("unchecked")
29-
protected AbstractStubFactory(Class<?> baseType) {
30-
this.baseType = (Class<? extends AbstractStub<?>>) baseType;
31-
}
32-
33-
@Override
34-
public boolean supports(Class<?> type) {
35-
return this.baseType.isAssignableFrom(type);
26+
protected static <S extends AbstractStub<?>> boolean supports(Class<S> baseType, Class<?> type) {
27+
return baseType.isAssignableFrom(type);
3628
}
3729

3830
@Override
39-
public T create(Supplier<ManagedChannel> channel, Class<? extends AbstractStub<?>> type) {
31+
public T create(Supplier<ManagedChannel> channel, Class<? extends T> type) {
32+
// All the generated stubs are static inner classes of the service
4033
Class<?> factory = type.getEnclosingClass();
4134
@SuppressWarnings("unchecked")
4235
T stub = (T) createStub(channel, factory, methodName());

spring-grpc-core/src/main/java/org/springframework/grpc/client/BlockingStubFactory.java

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,13 @@
1515
*/
1616
package org.springframework.grpc.client;
1717

18-
import org.springframework.core.Ordered;
19-
2018
import io.grpc.stub.AbstractBlockingStub;
2119

22-
public class BlockingStubFactory extends AbstractStubFactory<AbstractBlockingStub<?>> implements Ordered {
23-
24-
public BlockingStubFactory() {
25-
super(AbstractBlockingStub.class);
26-
}
20+
public class BlockingStubFactory extends AbstractStubFactory<AbstractBlockingStub<?>> {
2721

28-
@Override
29-
public boolean supports(Class<?> type) {
30-
return super.supports(type) && !type.getSimpleName().contains("BlockingV2");
31-
}
32-
33-
@Override
34-
public int getOrder() {
35-
return SimpleStubFactory.SIMPLE_STUB_ORDER - 30;
22+
public static boolean supports(Class<?> type) {
23+
return AbstractStubFactory.supports(AbstractBlockingStub.class, type)
24+
&& !type.getSimpleName().contains("BlockingV2");
3625
}
3726

3827
@Override

spring-grpc-core/src/main/java/org/springframework/grpc/client/BlockingV2StubFactory.java

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,13 @@
1515
*/
1616
package org.springframework.grpc.client;
1717

18-
import org.springframework.core.Ordered;
19-
2018
import io.grpc.stub.AbstractBlockingStub;
2119

22-
public class BlockingV2StubFactory extends AbstractStubFactory<AbstractBlockingStub<?>> implements Ordered {
23-
24-
public BlockingV2StubFactory() {
25-
super(AbstractBlockingStub.class);
26-
}
20+
public class BlockingV2StubFactory extends AbstractStubFactory<AbstractBlockingStub<?>> {
2721

28-
@Override
29-
public boolean supports(Class<?> type) {
30-
return super.supports(type) && type.getSimpleName().contains("BlockingV2");
31-
}
32-
33-
@Override
34-
public int getOrder() {
35-
return SimpleStubFactory.SIMPLE_STUB_ORDER - 30;
22+
public static boolean supports(Class<?> type) {
23+
return AbstractStubFactory.supports(AbstractBlockingStub.class, type)
24+
&& type.getSimpleName().contains("BlockingV2");
3625
}
3726

3827
@Override

spring-grpc-core/src/main/java/org/springframework/grpc/client/FutureStubFactory.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,13 @@
1515
*/
1616
package org.springframework.grpc.client;
1717

18-
import org.springframework.core.Ordered;
19-
2018
import io.grpc.stub.AbstractBlockingStub;
2119
import io.grpc.stub.AbstractFutureStub;
2220

23-
public class FutureStubFactory extends AbstractStubFactory<AbstractBlockingStub<?>> implements Ordered {
24-
25-
public FutureStubFactory() {
26-
super(AbstractFutureStub.class);
27-
}
21+
public class FutureStubFactory extends AbstractStubFactory<AbstractBlockingStub<?>> {
2822

29-
@Override
30-
public int getOrder() {
31-
return SimpleStubFactory.SIMPLE_STUB_ORDER - 20;
23+
public static boolean supports(Class<?> type) {
24+
return AbstractStubFactory.supports(AbstractFutureStub.class, type);
3225
}
3326

3427
@Override

0 commit comments

Comments
 (0)