Allow TestcontainersLifecycleBeanPostProcessor to detect scoped beans

Update `TestcontainersLifecycleBeanPostProcessor` so that scoped beans
are included.

Fixes gh-35786
This commit is contained in:
Phillip Webb
2024-06-25 22:00:34 -07:00
parent 8bcdb4b06b
commit eef4c3c2c0
2 changed files with 206 additions and 3 deletions

View File

@@ -102,8 +102,7 @@ class TestcontainersLifecycleBeanPostProcessor
private void initializeStartables(Startable startableBean, String startableBeanName) {
logger.trace(LogMessage.format("Initializing startables"));
List<String> beanNames = new ArrayList<>(
List.of(this.beanFactory.getBeanNamesForType(Startable.class, false, false)));
List<String> beanNames = new ArrayList<>(getBeanNames(Startable.class));
beanNames.remove(startableBeanName);
List<Object> beans = getBeans(beanNames);
if (beans == null) {
@@ -132,7 +131,7 @@ class TestcontainersLifecycleBeanPostProcessor
private void initializeContainers() {
if (this.containersInitialized.compareAndSet(false, true)) {
logger.trace("Initializing containers");
List<String> beanNames = List.of(this.beanFactory.getBeanNamesForType(ContainerState.class, false, false));
List<String> beanNames = getBeanNames(ContainerState.class);
List<Object> beans = getBeans(beanNames);
if (beans != null) {
logger.trace(LogMessage.format("Initialized containers %s", beanNames));
@@ -144,6 +143,10 @@ class TestcontainersLifecycleBeanPostProcessor
}
}
private List<String> getBeanNames(Class<?> type) {
return List.of(this.beanFactory.getBeanNamesForType(type, true, false));
}
private List<Object> getBeans(List<String> beanNames) {
List<Object> beans = new ArrayList<>(beanNames.size());
for (String beanName : beanNames) {