Skip to content
This repository was archived by the owner on Feb 23, 2023. It is now read-only.

Commit da9a0d7

Browse files
committed
Polish "Add hints for HealthContributors"
See gh-1184
1 parent 7d9ce05 commit da9a0d7

File tree

2 files changed

+31
-30
lines changed

2 files changed

+31
-30
lines changed

spring-aot/src/main/java/org/springframework/boot/actuate/endpoint/annotation/HealthContributorNativeConfigurationProcessor.java

+13-11
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import org.springframework.aot.context.bootstrap.generator.infrastructure.nativex.NativeConfigurationRegistry;
55
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
66
import org.springframework.boot.actuate.health.HealthContributor;
7-
import org.springframework.boot.actuate.health.HealthIndicator;
87
import org.springframework.nativex.hint.Flag;
98
import org.springframework.util.ClassUtils;
109

@@ -14,15 +13,18 @@
1413
*
1514
* @author Olivier Boudet
1615
*/
16+
class HealthContributorNativeConfigurationProcessor implements BeanFactoryNativeConfigurationProcessor {
1717

18-
public class HealthContributorNativeConfigurationProcessor implements BeanFactoryNativeConfigurationProcessor {
19-
@Override
20-
public void process(ConfigurableListableBeanFactory beanFactory, NativeConfigurationRegistry registry) {
21-
if (ClassUtils.isPresent("org.springframework.boot.actuate.health.HealthContributor", beanFactory.getBeanClassLoader())) {
22-
String[] healthContributorBeanNames = beanFactory.getBeanNamesForType(HealthContributor.class);
23-
for (String bean : healthContributorBeanNames) {
24-
registry.reflection().forType(beanFactory.getBean(bean, HealthContributor.class).getClass()).withFlags(Flag.allDeclaredConstructors).build();
25-
}
26-
}
27-
}
18+
private static final String HEALTH_CONTRIBUTOR_CLASS_NAME = "org.springframework.boot.actuate.health.HealthContributor";
19+
20+
@Override
21+
public void process(ConfigurableListableBeanFactory beanFactory, NativeConfigurationRegistry registry) {
22+
if (ClassUtils.isPresent(HEALTH_CONTRIBUTOR_CLASS_NAME, beanFactory.getBeanClassLoader())) {
23+
String[] beanNames = beanFactory.getBeanNamesForType(HealthContributor.class);
24+
for (String beanName : beanNames) {
25+
Class<?> beanType = beanFactory.getBeanDefinition(beanName).getResolvableType().toClass();
26+
registry.reflection().forType(beanType).withFlags(Flag.allDeclaredConstructors).build();
27+
}
28+
}
29+
}
2830
}

spring-aot/src/test/java/org/springframework/boot/actuate/endpoint/annotation/HealthContributorNativeConfigurationProcessorTests.java

+18-19
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,14 @@
1717
package org.springframework.boot.actuate.endpoint.annotation;
1818

1919
import org.junit.jupiter.api.Test;
20+
2021
import org.springframework.aot.context.bootstrap.generator.infrastructure.nativex.NativeConfigurationRegistry;
21-
import org.springframework.aot.context.bootstrap.generator.infrastructure.nativex.NativeReflectionEntry;
2222
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
2323
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
24-
import org.springframework.boot.actuate.health.Health;
25-
import org.springframework.boot.actuate.health.HealthIndicator;
24+
import org.springframework.boot.actuate.health.HealthContributor;
25+
import org.springframework.boot.actuate.health.PingHealthIndicator;
2626
import org.springframework.nativex.hint.Flag;
2727

28-
import java.util.List;
29-
3028
import static org.assertj.core.api.Assertions.assertThat;
3129

3230
/**
@@ -40,14 +38,24 @@ class HealthContributorNativeConfigurationProcessorTests {
4038
void registerHealthIndicator() {
4139
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
4240
beanFactory.registerBeanDefinition("noise", BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition());
43-
beanFactory.registerBeanDefinition("healthIndicator", BeanDefinitionBuilder.rootBeanDefinition(TestHealthIndicator.class).getBeanDefinition());
41+
beanFactory.registerBeanDefinition("healthIndicator", BeanDefinitionBuilder.rootBeanDefinition(PingHealthIndicator.class).getBeanDefinition());
4442
NativeConfigurationRegistry registry = process(beanFactory);
45-
List<NativeReflectionEntry> entries = registry.reflection().getEntries();
46-
assertThat(entries).anySatisfy((entry) -> {
47-
assertThat(entry.getType()).isEqualTo(TestHealthIndicator.class);
43+
assertThat(registry.reflection().getEntries()).singleElement().satisfies((entry) -> {
44+
assertThat(entry.getType()).isEqualTo(PingHealthIndicator.class);
45+
assertThat(entry.getFlags()).contains(Flag.allDeclaredConstructors);
46+
});
47+
}
48+
49+
@Test
50+
void registerHealthContributor() {
51+
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
52+
beanFactory.registerBeanDefinition("noise", BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition());
53+
beanFactory.registerBeanDefinition("healthContributor", BeanDefinitionBuilder.rootBeanDefinition(HealthContributor.class).getBeanDefinition());
54+
NativeConfigurationRegistry registry = process(beanFactory);
55+
assertThat(registry.reflection().getEntries()).singleElement().satisfies((entry) -> {
56+
assertThat(entry.getType()).isEqualTo(HealthContributor.class);
4857
assertThat(entry.getFlags()).contains(Flag.allDeclaredConstructors);
4958
});
50-
assertThat(entries).hasSize(1);
5159
}
5260

5361
private NativeConfigurationRegistry process(DefaultListableBeanFactory beanFactory) {
@@ -56,13 +64,4 @@ private NativeConfigurationRegistry process(DefaultListableBeanFactory beanFacto
5664
return registry;
5765
}
5866

59-
@SuppressWarnings("unused")
60-
static class TestHealthIndicator implements HealthIndicator {
61-
62-
@Override
63-
public Health health() {
64-
return Health.up().build();
65-
}
66-
}
67-
6867
}

0 commit comments

Comments
 (0)