1616
1717package org .springframework .boot .testcontainers .service .connection ;
1818
19- import java .lang .reflect .Method ;
2019import java .util .LinkedHashSet ;
2120import java .util .Set ;
2221
2322import org .testcontainers .containers .Container ;
2423
2524import org .springframework .beans .factory .BeanFactory ;
2625import org .springframework .beans .factory .NoSuchBeanDefinitionException ;
26+ import org .springframework .beans .factory .annotation .AnnotatedBeanDefinition ;
2727import org .springframework .beans .factory .config .BeanDefinition ;
2828import org .springframework .beans .factory .config .ConfigurableListableBeanFactory ;
2929import org .springframework .beans .factory .support .BeanDefinitionRegistry ;
30- import org .springframework .beans .factory .support .RootBeanDefinition ;
3130import org .springframework .boot .autoconfigure .service .connection .ConnectionDetailsFactories ;
3231import org .springframework .boot .origin .Origin ;
3332import org .springframework .boot .testcontainers .beans .TestcontainerBeanDefinition ;
3433import org .springframework .context .annotation .ImportBeanDefinitionRegistrar ;
3534import org .springframework .core .annotation .MergedAnnotation ;
3635import org .springframework .core .annotation .MergedAnnotations ;
3736import org .springframework .core .type .AnnotationMetadata ;
37+ import org .springframework .core .type .MethodMetadata ;
3838
3939/**
4040 * {@link ImportBeanDefinitionRegistrar} used by
@@ -63,8 +63,7 @@ private void registerBeanDefinitions(ConfigurableListableBeanFactory beanFactory
6363 new ConnectionDetailsFactories (null ));
6464 for (String beanName : beanFactory .getBeanNamesForType (Container .class )) {
6565 BeanDefinition beanDefinition = getBeanDefinition (beanFactory , beanName );
66- MergedAnnotations annotations = (beanDefinition instanceof TestcontainerBeanDefinition testcontainerBeanDefinition )
67- ? testcontainerBeanDefinition .getAnnotations () : getAnnotationsFromFactoryMethod (beanDefinition );
66+ MergedAnnotations annotations = getAnnotations (beanDefinition );
6867 for (ServiceConnection serviceConnection : getServiceConnections (beanFactory , beanName , annotations )) {
6968 ContainerConnectionSource <?> source = createSource (beanFactory , beanName , beanDefinition , annotations ,
7069 serviceConnection );
@@ -73,16 +72,6 @@ private void registerBeanDefinitions(ConfigurableListableBeanFactory beanFactory
7372 }
7473 }
7574
76- private MergedAnnotations getAnnotationsFromFactoryMethod (BeanDefinition beanDefinition ) {
77- if (beanDefinition instanceof RootBeanDefinition rootBeanDefinition ) {
78- Method factoryMethod = rootBeanDefinition .getResolvedFactoryMethod ();
79- if (factoryMethod != null ) {
80- return MergedAnnotations .from (factoryMethod , MergedAnnotations .SearchStrategy .DIRECT );
81- }
82- }
83- return null ;
84- }
85-
8675 private Set <ServiceConnection > getServiceConnections (ConfigurableListableBeanFactory beanFactory , String beanName ,
8776 MergedAnnotations annotations ) {
8877 Set <ServiceConnection > serviceConnections = beanFactory .findAllAnnotationsOnBean (beanName ,
@@ -105,6 +94,17 @@ private BeanDefinition getBeanDefinition(ConfigurableListableBeanFactory beanFac
10594 }
10695 }
10796
97+ private MergedAnnotations getAnnotations (BeanDefinition beanDefinition ) {
98+ if (beanDefinition instanceof TestcontainerBeanDefinition testcontainerBeanDefinition ) {
99+ return testcontainerBeanDefinition .getAnnotations ();
100+ }
101+ if (beanDefinition instanceof AnnotatedBeanDefinition annotatedBeanDefinition ) {
102+ MethodMetadata metadata = annotatedBeanDefinition .getFactoryMethodMetadata ();
103+ return (metadata != null ) ? metadata .getAnnotations () : null ;
104+ }
105+ return null ;
106+ }
107+
108108 @ SuppressWarnings ("unchecked" )
109109 private <C extends Container <?>> ContainerConnectionSource <C > createSource (
110110 ConfigurableListableBeanFactory beanFactory , String beanName , BeanDefinition beanDefinition ,
0 commit comments