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")
は値がStringパラメータであることを意味しますが、String []型にキャストされるのはなぜですか?なぜSpringのProfileCondition.matchesメソッドが値(Object)をString []型にキャストするのですか?
'value' *は' String [] 'でなければなりません。そうでなければ' ClassCastException'がスローされます。 –