ConditionalOnClass.java (spring-boot-2.7.3) | : | ConditionalOnClass.java (spring-boot-2.7.4) | ||
---|---|---|---|---|
/* | /* | |||
* Copyright 2012-2019 the original author or authors. | * Copyright 2012-2022 the original author or authors. | |||
* | * | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | |||
* you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | |||
* You may obtain a copy of the License at | * You may obtain a copy of the License at | |||
* | * | |||
* https://www.apache.org/licenses/LICENSE-2.0 | * https://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
skipping to change at line 31 | skipping to change at line 31 | |||
import java.lang.annotation.Retention; | import java.lang.annotation.Retention; | |||
import java.lang.annotation.RetentionPolicy; | import java.lang.annotation.RetentionPolicy; | |||
import java.lang.annotation.Target; | import java.lang.annotation.Target; | |||
import org.springframework.context.annotation.Conditional; | import org.springframework.context.annotation.Conditional; | |||
/** | /** | |||
* {@link Conditional @Conditional} that only matches when the specified classes are on | * {@link Conditional @Conditional} that only matches when the specified classes are on | |||
* the classpath. | * the classpath. | |||
* <p> | * <p> | |||
* A {@link #value()} can be safely specified on {@code @Configuration} classes | * A {@code Class} {@link #value() value} can be safely specified on | |||
as the | * {@code @Configuration} classes as the annotation metadata is parsed by using | |||
* annotation metadata is parsed by using ASM before the class is loaded. Extra | ASM before | |||
care is | * the class is loaded. If a class reference cannot be used then a {@link #name( | |||
* required when placed on {@code @Bean} methods, consider isolating the conditi | ) name} | |||
on in a | * {@code String} attribute can be used. | |||
* separate {@code Configuration} class, in particular if the return type of the | * <p> | |||
method | * <b>Note:</b> Extra care must be taken when using {@code @ConditionalOnClass} | |||
* matches the {@link #value target of the condition}. | on | |||
* {@code @Bean} methods where typically the return type is the target of the co | ||||
ndition. | ||||
* Before the condition on the method applies, the JVM will have loaded the clas | ||||
s and | ||||
* potentially processed method references which will fail if the class is not p | ||||
resent. To | ||||
* handle this scenario, a separate {@code @Configuration} class should be used | ||||
to isolate | ||||
* the condition. For example: <pre class="code"> | ||||
* @AutoConfiguration | ||||
* public class MyAutoConfiguration { | ||||
* | ||||
* @Configuration(proxyBeanMethods = false) | ||||
* @ConditionalOnClass(SomeService.class) | ||||
* public static class SomeServiceConfiguration { | ||||
* | ||||
* @Bean | ||||
* @ConditionalOnMissingBean | ||||
* public SomeService someService() { | ||||
* return new SomeService(); | ||||
* } | ||||
* | ||||
* } | ||||
* | ||||
* }</pre> | ||||
* | * | |||
* @author Phillip Webb | * @author Phillip Webb | |||
* @since 1.0.0 | * @since 1.0.0 | |||
*/ | */ | |||
@Target({ ElementType.TYPE, ElementType.METHOD }) | @Target({ ElementType.TYPE, ElementType.METHOD }) | |||
@Retention(RetentionPolicy.RUNTIME) | @Retention(RetentionPolicy.RUNTIME) | |||
@Documented | @Documented | |||
@Conditional(OnClassCondition.class) | @Conditional(OnClassCondition.class) | |||
public @interface ConditionalOnClass { | public @interface ConditionalOnClass { | |||
End of changes. 2 change blocks. | ||||
10 lines changed or deleted | 35 lines changed or added |