条件注解内部的一些基础
以@ConditionalOnClass注解为例,它的定义如下:
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(OnClassCondition.class)
public @interface ConditionalOnClass {
Class<?>[] value() default {}; // 需要匹配的类
String[] name() default {}; // 需要匹配的类名
}
public interface Condition {
// ConditionContext内部会存储Spring容器、应用程序环境信息、资源加载器、类加载器
boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);
}
public interface ConfigurationCondition extends Condition {
ConfigurationPhase getConfigurationPhase();
public static enum ConfigurationPhase {
PARSE_CONFIGURATION,
REGISTER_BEAN
}
}