public void parseQualifierElement ( Element ele , AbstractBeanDefinition bd ) { String typeName = ele . getAttribute ( TYPE_ATTRIBUTE ) ; if ( ! StringUtils . hasLength ( typeName ) ) { error ( "Tag 'qualifier' must have a 'type' attribute" , ele ) ; return ; } this . parseState . push ( new QualifierEntry ( typeName ) ) ; try { AutowireCandidateQualifier qualifier = new AutowireCandidateQualifier ( typeName ) ; qualifier . setSource ( extractSource ( ele ) ) ; String value = ele . getAttribute ( VALUE_ATTRIBUTE ) ; if ( StringUtils . hasLength ( value ) ) { qualifier . setAttribute ( AutowireCandidateQualifier . VALUE_KEY , value ) ; } NodeList nl = ele . getChildNodes ( ) ; for ( int i = 0 ; i < nl . getLength ( ) ; i ++ ) { Node node = nl . item ( i ) ; if ( node instanceof Element && nodeNameEquals ( node , QUALIFIER_ATTRIBUTE_ELEMENT ) ) { Element attributeEle = ( Element ) node ; String attributeName = attributeEle . getAttribute ( KEY_ATTRIBUTE ) ; String attributeValue = attributeEle . getAttribute ( VALUE_ATTRIBUTE ) ; if ( StringUtils . hasLength ( attributeName ) && StringUtils . hasLength ( attributeValue ) ) { BeanMetadataAttribute attribute = new BeanMetadataAttribute ( attributeName , attributeValue ) ; attribute . setSource ( extractSource ( attributeEle ) ) ; qualifier . addMetadataAttribute ( attribute ) ; } else { error ( "Qualifier 'attribute' tag must have a 'name' and 'value'" , attributeEle ) ; return ; } } } bd . addQualifier ( qualifier ) ; } finally { this . parseState . pop ( ) ; } }
Parse a qualifier element .