46
46
import org .springframework .core .type .filter .AnnotationTypeFilter ;
47
47
import org .springframework .util .Assert ;
48
48
import org .springframework .util .ClassUtils ;
49
+ import org .springframework .util .StringUtils ;
49
50
import org .springframework .web .service .annotation .HttpExchange ;
50
51
51
52
/**
@@ -123,12 +124,17 @@ public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
123
124
124
125
@ Override
125
126
public final void registerBeanDefinitions (
126
- AnnotationMetadata importingClassMetadata , BeanDefinitionRegistry beanRegistry ,
127
- BeanNameGenerator beanNameGenerator ) {
127
+ AnnotationMetadata metadata , BeanDefinitionRegistry registry , BeanNameGenerator generator ) {
128
128
129
- registerHttpServices (new DefaultGroupRegistry (), importingClassMetadata );
129
+ registerBeanDefinitions (metadata , registry );
130
+ }
131
+
132
+ @ Override
133
+ public final void registerBeanDefinitions (AnnotationMetadata metadata , BeanDefinitionRegistry beanRegistry ) {
134
+
135
+ registerHttpServices (new DefaultGroupRegistry (), metadata );
130
136
131
- String proxyRegistryBeanName = HttpServiceProxyRegistry .class .getName ( );
137
+ String proxyRegistryBeanName = StringUtils . uncapitalize ( HttpServiceProxyRegistry .class .getSimpleName () );
132
138
GenericBeanDefinition proxyRegistryBeanDef ;
133
139
134
140
if (!beanRegistry .containsBeanDefinition (proxyRegistryBeanName )) {
@@ -142,23 +148,19 @@ public final void registerBeanDefinitions(
142
148
proxyRegistryBeanDef = (GenericBeanDefinition ) beanRegistry .getBeanDefinition (proxyRegistryBeanName );
143
149
}
144
150
145
- mergeHttpServices (proxyRegistryBeanDef );
151
+ mergeGroups (proxyRegistryBeanDef );
146
152
147
153
this .groupMap .forEach ((groupName , group ) -> group .httpServiceTypeNames ().forEach (type -> {
148
154
GenericBeanDefinition proxyBeanDef = new GenericBeanDefinition ();
149
155
proxyBeanDef .setBeanClassName (type );
150
- String beanName = (groupName + ". " + beanNameGenerator . generateBeanName ( proxyBeanDef , beanRegistry ) );
156
+ String beanName = (groupName + "# " + type );
151
157
proxyBeanDef .setInstanceSupplier (() -> getProxyInstance (proxyRegistryBeanName , groupName , type ));
152
158
if (!beanRegistry .containsBeanDefinition (beanName )) {
153
159
beanRegistry .registerBeanDefinition (beanName , proxyBeanDef );
154
160
}
155
161
}));
156
162
}
157
163
158
- @ Override
159
- public final void registerBeanDefinitions (AnnotationMetadata metadata , BeanDefinitionRegistry registry ) {
160
- }
161
-
162
164
/**
163
165
* This method is called before any bean definition registrations are made.
164
166
* Subclasses must implement it to register the HTTP Services for which bean
@@ -181,7 +183,7 @@ private ClassPathScanningCandidateComponentProvider getScanner() {
181
183
}
182
184
183
185
@ SuppressWarnings ("unchecked" )
184
- private void mergeHttpServices (GenericBeanDefinition proxyRegistryBeanDef ) {
186
+ private void mergeGroups (GenericBeanDefinition proxyRegistryBeanDef ) {
185
187
ConstructorArgumentValues args = proxyRegistryBeanDef .getConstructorArgumentValues ();
186
188
ConstructorArgumentValues .ValueHolder valueHolder = args .getArgumentValue (0 , Map .class );
187
189
Assert .state (valueHolder != null , "Expected Map constructor argument at index 0" );
@@ -233,7 +235,9 @@ protected interface GroupRegistry {
233
235
/**
234
236
* Perform HTTP Service registrations for the given group.
235
237
*/
236
- GroupSpec forGroup (String name );
238
+ default GroupSpec forGroup (String name ) {
239
+ return forGroup (name , HttpServiceGroup .ClientType .UNSPECIFIED );
240
+ }
237
241
238
242
/**
239
243
* Variant of {@link #forGroup(String)} with a client type.
@@ -278,11 +282,6 @@ interface GroupSpec {
278
282
*/
279
283
private class DefaultGroupRegistry implements GroupRegistry {
280
284
281
- @ Override
282
- public GroupSpec forGroup (String name ) {
283
- return forGroup (name , HttpServiceGroup .ClientType .UNSPECIFIED );
284
- }
285
-
286
285
@ Override
287
286
public GroupSpec forGroup (String name , HttpServiceGroup .ClientType clientType ) {
288
287
return new DefaultGroupSpec (name , clientType );
@@ -313,36 +312,36 @@ else if (defaultClientType != HttpServiceGroup.ClientType.UNSPECIFIED) {
313
312
314
313
@ Override
315
314
public GroupSpec register (Class <?>... serviceTypes ) {
316
- getOrCreateGroup (groupName , clientType ).addHttpServiceTypes (serviceTypes );
315
+ getOrCreateGroup ().addHttpServiceTypes (serviceTypes );
317
316
return this ;
318
317
}
319
318
320
319
@ Override
321
320
public GroupSpec detectInBasePackages (Class <?>... packageClasses ) {
322
321
for (Class <?> packageClass : packageClasses ) {
323
- detect (this . groupName , this . clientType , packageClass .getPackageName ());
322
+ detect (packageClass .getPackageName ());
324
323
}
325
324
return this ;
326
325
}
327
326
328
327
@ Override
329
328
public GroupSpec detectInBasePackages (String ... packageNames ) {
330
329
for (String packageName : packageNames ) {
331
- detect (this . groupName , this . clientType , packageName );
330
+ detect (packageName );
332
331
}
333
332
return this ;
334
333
}
335
334
336
- private void detect (String groupName , HttpServiceGroup . ClientType clientType , String packageName ) {
335
+ private void detect (String packageName ) {
337
336
for (BeanDefinition definition : getScanner ().findCandidateComponents (packageName )) {
338
337
if (definition .getBeanClassName () != null ) {
339
- getOrCreateGroup (groupName , clientType ).addHttpServiceTypeName (definition .getBeanClassName ());
338
+ getOrCreateGroup ().addHttpServiceTypeName (definition .getBeanClassName ());
340
339
}
341
340
}
342
341
}
343
342
344
- private RegisteredGroup getOrCreateGroup (String groupName , HttpServiceGroup . ClientType clientType ) {
345
- return groupMap .computeIfAbsent (groupName , name -> new RegisteredGroup (name , clientType ));
343
+ private RegisteredGroup getOrCreateGroup () {
344
+ return groupMap .computeIfAbsent (this . groupName , name -> new RegisteredGroup (name , this . clientType ));
346
345
}
347
346
}
348
347
}
@@ -376,7 +375,7 @@ public Set<String> httpServiceTypeNames() {
376
375
377
376
@ Override
378
377
public Set <Class <?>> httpServiceTypes () {
379
- return httpServiceTypeNames .stream ()
378
+ return this . httpServiceTypeNames .stream ()
380
379
.map (AbstractHttpServiceRegistrar ::loadClass )
381
380
.collect (Collectors .toSet ());
382
381
}
0 commit comments