class ProfileCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
MultiValueMap<String, Object> attrs = metadata.getAllAnnotationAttributes(Profile.class.getName());
if (attrs != null) {
for (Object value : attrs.get("value")) {
if (context.getEnvironment().acceptsProfiles((String[]) value)){
return true;
}
}
return false;
}
return true;
}
正如你所看到的,ProfileCondition获取从AnnotationTypeMetadata @profile注解注释的所有属性。在配置文件类中,值定义为String[] value();
因此,for (Object value : attrs.get("value")
意思是value是一个String参数,但它为什么转换为String []类型?为什么Spring的ProfileCondition.matches方法将值(Object)转换为String []类型?
'value' *必须*为'String []',否则会抛出'ClassCastException'。 –