diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpoint.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpoint.java index 52664b9d58..f55fb15443 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpoint.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpoint.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExtension; import org.springframework.context.annotation.Conditional; import org.springframework.core.env.Environment; @@ -31,6 +32,60 @@ import org.springframework.core.env.Environment; * according to the endpoints specific {@link Environment} property, falling back to * {@code management.endpoints.enabled-by-default} or failing that * {@link Endpoint#enableByDefault()}. + *
+ * When placed on a {@code @Bean} method, the endpoint defaults to the return type of the + * factory method: + * + *
+ * @Configuration + * public class MyConfiguration { + * + * @ConditionalOnEnableEndpoint + * @Bean + * public MyEndpoint myEndpoint() { + * ... + * } + * + * }+ *
+ * It is also possible to use the same mechanism for extensions: + * + *
+ * @Configuration + * public class MyConfiguration { + * + * @ConditionalOnEnableEndpoint + * @Bean + * public MyEndpointWebExtension myEndpointWebExtension() { + * ... + * } + * + * }+ *
+ * In the sample above, {@code MyEndpointWebExtension} will be created if the endpoint is + * enabled as defined by the rules above. {@code MyEndpointWebExtension} must be a regular + * extension that refers to an endpoint, something like: + * + *
+ * @EndpointWebExtension(endpoint = MyEndpoint.class) + * public class MyEndpointWebExtension { + * + * }+ *
+ * Alternatively, the target endpoint can be manually specified for components that should + * only be created when a given endpoint is enabled: + * + *
+ * @Configuration + * public class MyConfiguration { + * + * @ConditionalOnEnableEndpoint(endpoint = MyEndpoint.class) + * @Bean + * public MyComponent myComponent() { + * ... + * } + * + * }* * @author Stephane Nicoll * @since 2.0.0 @@ -42,4 +97,12 @@ import org.springframework.core.env.Environment; @Conditional(OnEnabledEndpointCondition.class) public @interface ConditionalOnEnabledEndpoint { + /** + * The endpoint type that should be checked. Inferred when the return type of the + * {@code @Bean} method is either an {@link Endpoint} or an {@link EndpointExtension}. + * @return the endpoint type to check + * @since 2.0.6 + */ + Class> endpoint() default Void.class; + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnEnabledEndpointCondition.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnEnabledEndpointCondition.java index 6e2f93a6ed..ef25e29311 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnEnabledEndpointCondition.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnEnabledEndpointCondition.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.endpoint.condition; +import java.util.Map; import java.util.Optional; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; @@ -92,16 +93,23 @@ class OnEnabledEndpointCondition extends SpringBootCondition { metadata instanceof MethodMetadata && metadata.isAnnotated(Bean.class.getName()), "OnEnabledEndpointCondition may only be used on @Bean methods"); - return getEndpointAttributes(context, (MethodMetadata) metadata); + Class> endpointType = getEndpointType(context, (MethodMetadata) metadata); + return getEndpointAttributes(endpointType); } - private AnnotationAttributes getEndpointAttributes(ConditionContext context, - MethodMetadata metadata) { + private Class> getEndpointType(ConditionContext context, MethodMetadata metadata) { + Map