mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-08-29 03:06:45 +08:00
Search implemented interfaces for @ServiceConnection fields
Fixes gh-37671
This commit is contained in:
parent
4271e6da6c
commit
86216fb4e9
@ -41,6 +41,7 @@ import org.springframework.util.ReflectionUtils;
|
||||
* @author Moritz Halbritter
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
* @author Scott Frederick
|
||||
*/
|
||||
class ServiceConnectionContextCustomizerFactory implements ContextCustomizerFactory {
|
||||
|
||||
@ -61,6 +62,9 @@ class ServiceConnectionContextCustomizerFactory implements ContextCustomizerFact
|
||||
if (TestContextAnnotationUtils.searchEnclosingClass(clazz)) {
|
||||
findSources(clazz.getEnclosingClass(), sources);
|
||||
}
|
||||
for (Class<?> implementedInterface : clazz.getInterfaces()) {
|
||||
findSources(implementedInterface, sources);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@ -71,7 +71,31 @@ class ServiceConnectionContextCustomizerFactoryTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void createContextCustomizerWhenClassHasNonStaticServiceConnectionFailsWithHepfulException() {
|
||||
void createContextCustomizerWhenInterfaceHasServiceConnectionsReturnsCustomizer() {
|
||||
ServiceConnectionContextCustomizer customizer = (ServiceConnectionContextCustomizer) this.factory
|
||||
.createContextCustomizer(ServiceConnectionsInterface.class, null);
|
||||
assertThat(customizer).isNotNull();
|
||||
assertThat(customizer.getSources()).hasSize(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
void createContextCustomizerWhenSuperclassHasServiceConnectionsReturnsCustomizer() {
|
||||
ServiceConnectionContextCustomizer customizer = (ServiceConnectionContextCustomizer) this.factory
|
||||
.createContextCustomizer(ServiceConnectionsSubclass.class, null);
|
||||
assertThat(customizer).isNotNull();
|
||||
assertThat(customizer.getSources()).hasSize(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
void createContextCustomizerWhenImplementedInterfaceHasServiceConnectionsReturnsCustomizer() {
|
||||
ServiceConnectionContextCustomizer customizer = (ServiceConnectionContextCustomizer) this.factory
|
||||
.createContextCustomizer(ServiceConnectionsImpl.class, null);
|
||||
assertThat(customizer).isNotNull();
|
||||
assertThat(customizer.getSources()).hasSize(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
void createContextCustomizerWhenClassHasNonStaticServiceConnectionFailsWithHelpfulException() {
|
||||
assertThatIllegalStateException()
|
||||
.isThrownBy(() -> this.factory.createContextCustomizer(NonStaticServiceConnection.class, null))
|
||||
.withMessage("@ServiceConnection field 'service' must be static");
|
||||
@ -79,7 +103,7 @@ class ServiceConnectionContextCustomizerFactoryTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void createContextCustomizerWhenClassHasAnnotationOnNonConnectionFieldFailsWithHepfulException() {
|
||||
void createContextCustomizerWhenClassHasAnnotationOnNonConnectionFieldFailsWithHelpfulException() {
|
||||
assertThatIllegalStateException()
|
||||
.isThrownBy(() -> this.factory.createContextCustomizer(ServiceConnectionOnWrongFieldType.class, null))
|
||||
.withMessage("Field 'service2' in " + ServiceConnectionOnWrongFieldType.class.getName()
|
||||
@ -141,6 +165,27 @@ class ServiceConnectionContextCustomizerFactoryTests {
|
||||
|
||||
}
|
||||
|
||||
interface ServiceConnectionsInterface {
|
||||
|
||||
@ServiceConnection
|
||||
Container<?> service1 = new MockContainer();
|
||||
|
||||
@ServiceConnection
|
||||
Container<?> service2 = new MockContainer();
|
||||
|
||||
default void dummy() {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class ServiceConnectionsSubclass extends ServiceConnections {
|
||||
|
||||
}
|
||||
|
||||
static class ServiceConnectionsImpl implements ServiceConnectionsInterface {
|
||||
|
||||
}
|
||||
|
||||
static class NonStaticServiceConnection {
|
||||
|
||||
@ServiceConnection
|
||||
|
Loading…
Reference in New Issue
Block a user