org.springframework.core.annotation.AnnotationUtils#getDefaultValue ( )源码实例Demo

下面列出了org.springframework.core.annotation.AnnotationUtils#getDefaultValue ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

private Annotation synthesizeWithMethodParameterNameAsFallbackValue(
		Annotation parameterAnnotation, Method method, int parameterIndex) {
	Map<String, Object> annotationAttributes = AnnotationUtils
			.getAnnotationAttributes(parameterAnnotation);
	Object defaultValue = AnnotationUtils.getDefaultValue(parameterAnnotation);
	if (defaultValue instanceof String
			&& defaultValue.equals(annotationAttributes.get(AnnotationUtils.VALUE))) {
		Type[] parameterTypes = method.getGenericParameterTypes();
		String[] parameterNames = PARAMETER_NAME_DISCOVERER.getParameterNames(method);
		if (shouldAddParameterName(parameterIndex, parameterTypes, parameterNames)) {
			annotationAttributes.put(AnnotationUtils.VALUE,
					parameterNames[parameterIndex]);
		}
	}
	return AnnotationUtils.synthesizeAnnotation(annotationAttributes,
			parameterAnnotation.annotationType(), null);
}
 
源代码2 项目: raptor   文件: SpringMvcContract.java
private Annotation synthesizeWithMethodParameterNameAsFallbackValue(
        Annotation parameterAnnotation, Method method, int parameterIndex) {
    Map<String, Object> annotationAttributes = AnnotationUtils
            .getAnnotationAttributes(parameterAnnotation);
    Object defaultValue = AnnotationUtils.getDefaultValue(parameterAnnotation);
    if (defaultValue instanceof String
            && defaultValue.equals(annotationAttributes.get(AnnotationUtils.VALUE))) {
        Type[] parameterTypes = method.getGenericParameterTypes();
        String[] parameterNames = PARAMETER_NAME_DISCOVERER.getParameterNames(method);
        if (shouldAddParameterName(parameterIndex, parameterTypes, parameterNames)) {
            annotationAttributes.put(AnnotationUtils.VALUE,
                    parameterNames[parameterIndex]);
        }
    }
    return AnnotationUtils.synthesizeAnnotation(annotationAttributes,
            parameterAnnotation.annotationType(), null);
}
 
private Annotation synthesizeWithMethodParameterNameAsFallbackValue(
        Annotation parameterAnnotation, Method method, int parameterIndex) {
    Map<String, Object> annotationAttributes = AnnotationUtils
            .getAnnotationAttributes(parameterAnnotation);
    Object defaultValue = AnnotationUtils.getDefaultValue(parameterAnnotation);
    if (defaultValue instanceof String
            && defaultValue.equals(annotationAttributes.get(AnnotationUtils.VALUE))) {
        Type[] parameterTypes = method.getGenericParameterTypes();
        String[] parameterNames = PARAMETER_NAME_DISCOVERER.getParameterNames(method);
        if (shouldAddParameterName(parameterIndex, parameterTypes, parameterNames)) {
            annotationAttributes.put(AnnotationUtils.VALUE,
                    parameterNames[parameterIndex]);
        }
    }
    return AnnotationUtils.synthesizeAnnotation(annotationAttributes,
            parameterAnnotation.annotationType(), null);
}
 
源代码4 项目: lams   文件: ProxyAsyncConfiguration.java
@Bean(name = TaskManagementConfigUtils.ASYNC_ANNOTATION_PROCESSOR_BEAN_NAME)
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public AsyncAnnotationBeanPostProcessor asyncAdvisor() {
	Assert.notNull(this.enableAsync, "@EnableAsync annotation metadata was not injected");
	AsyncAnnotationBeanPostProcessor bpp = new AsyncAnnotationBeanPostProcessor();
	Class<? extends Annotation> customAsyncAnnotation = this.enableAsync.getClass("annotation");
	if (customAsyncAnnotation != AnnotationUtils.getDefaultValue(EnableAsync.class, "annotation")) {
		bpp.setAsyncAnnotationType(customAsyncAnnotation);
	}
	if (this.executor != null) {
		bpp.setExecutor(this.executor);
	}
	if (this.exceptionHandler != null) {
		bpp.setExceptionHandler(this.exceptionHandler);
	}
	bpp.setProxyTargetClass(this.enableAsync.getBoolean("proxyTargetClass"));
	bpp.setOrder(this.enableAsync.<Integer>getNumber("order"));
	return bpp;
}
 
@Bean(name = TaskManagementConfigUtils.ASYNC_ANNOTATION_PROCESSOR_BEAN_NAME)
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public AsyncAnnotationBeanPostProcessor asyncAdvisor() {
	Assert.notNull(this.enableAsync, "@EnableAsync annotation metadata was not injected");
	AsyncAnnotationBeanPostProcessor bpp = new AsyncAnnotationBeanPostProcessor();
	Class<? extends Annotation> customAsyncAnnotation = this.enableAsync.getClass("annotation");
	if (customAsyncAnnotation != AnnotationUtils.getDefaultValue(EnableAsync.class, "annotation")) {
		bpp.setAsyncAnnotationType(customAsyncAnnotation);
	}
	if (this.executor != null) {
		bpp.setExecutor(this.executor);
	}
	if (this.exceptionHandler != null) {
		bpp.setExceptionHandler(this.exceptionHandler);
	}
	bpp.setProxyTargetClass(this.enableAsync.getBoolean("proxyTargetClass"));
	bpp.setOrder(this.enableAsync.<Integer>getNumber("order"));
	return bpp;
}
 
@Bean(name = TaskManagementConfigUtils.ASYNC_ANNOTATION_PROCESSOR_BEAN_NAME)
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public AsyncAnnotationBeanPostProcessor asyncAdvisor() {
	Assert.notNull(this.enableAsync, "@EnableAsync annotation metadata was not injected");
	AsyncAnnotationBeanPostProcessor bpp = new AsyncAnnotationBeanPostProcessor();
	bpp.configure(this.executor, this.exceptionHandler);
	Class<? extends Annotation> customAsyncAnnotation = this.enableAsync.getClass("annotation");
	if (customAsyncAnnotation != AnnotationUtils.getDefaultValue(EnableAsync.class, "annotation")) {
		bpp.setAsyncAnnotationType(customAsyncAnnotation);
	}
	bpp.setProxyTargetClass(this.enableAsync.getBoolean("proxyTargetClass"));
	bpp.setOrder(this.enableAsync.<Integer>getNumber("order"));
	return bpp;
}
 
@Bean(name = TaskManagementConfigUtils.ASYNC_ANNOTATION_PROCESSOR_BEAN_NAME)
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public AsyncAnnotationBeanPostProcessor asyncAdvisor() {
	Assert.notNull(this.enableAsync, "@EnableAsync annotation metadata was not injected");
	AsyncAnnotationBeanPostProcessor bpp = new AsyncAnnotationBeanPostProcessor();
	bpp.configure(this.executor, this.exceptionHandler);
	Class<? extends Annotation> customAsyncAnnotation = this.enableAsync.getClass("annotation");
	if (customAsyncAnnotation != AnnotationUtils.getDefaultValue(EnableAsync.class, "annotation")) {
		bpp.setAsyncAnnotationType(customAsyncAnnotation);
	}
	bpp.setProxyTargetClass(this.enableAsync.getBoolean("proxyTargetClass"));
	bpp.setOrder(this.enableAsync.<Integer>getNumber("order"));
	return bpp;
}
 
protected Annotation synthesizeWithMethodParameterNameAsFallbackValue(Annotation parameterAnnotation, Method method,
    int parameterIndex) {
    Map<String, Object> annotationAttributes = AnnotationUtils.getAnnotationAttributes(parameterAnnotation);
    Object defaultValue = AnnotationUtils.getDefaultValue(parameterAnnotation);
    if (defaultValue instanceof String && defaultValue.equals(annotationAttributes.get(AnnotationUtils.VALUE))) {
        Type[] parameterTypes = method.getGenericParameterTypes();
        String[] parameterNames = PARAMETER_NAME_DISCOVERER.getParameterNames(method);
        if (shouldAddParameterName(parameterIndex, parameterTypes, parameterNames)) {
            annotationAttributes.put(AnnotationUtils.VALUE, parameterNames[parameterIndex]);
        }
    }
    return AnnotationUtils.synthesizeAnnotation(annotationAttributes, parameterAnnotation.annotationType(), null);
}
 
/**
 * Returns the {@link Query} annotation's attribute casted to the given type or default value if no annotation
 * available.
 * 
 * @param attribute
 * @param type
 * @return
 */
private <T> T getAnnotationValue(String attribute, Class<T> type) {

	Query annotation = method.getAnnotation(Query.class);
	Object value = annotation == null ? AnnotationUtils.getDefaultValue(Query.class, attribute) : AnnotationUtils
			.getValue(annotation, attribute);

	return type.cast(value);
}
 
源代码10 项目: spring-analysis-note   文件: ProfileValueUtils.java
/**
 * Retrieves the {@link ProfileValueSource} type for the specified
 * {@link Class test class} as configured via the
 * {@link ProfileValueSourceConfiguration
 * &#064;ProfileValueSourceConfiguration} annotation and instantiates a new
 * instance of that type.
 * <p>If {@link ProfileValueSourceConfiguration
 * &#064;ProfileValueSourceConfiguration} is not present on the specified
 * class or if a custom {@link ProfileValueSource} is not declared, the
 * default {@link SystemProfileValueSource} will be returned instead.
 * @param testClass the test class for which the ProfileValueSource should
 * be retrieved
 * @return the configured (or default) ProfileValueSource for the specified
 * class
 * @see SystemProfileValueSource
 */
@SuppressWarnings("unchecked")
public static ProfileValueSource retrieveProfileValueSource(Class<?> testClass) {
	Assert.notNull(testClass, "testClass must not be null");

	Class<ProfileValueSourceConfiguration> annotationType = ProfileValueSourceConfiguration.class;
	ProfileValueSourceConfiguration config = AnnotatedElementUtils.findMergedAnnotation(testClass, annotationType);
	if (logger.isDebugEnabled()) {
		logger.debug("Retrieved @ProfileValueSourceConfiguration [" + config + "] for test class [" +
				testClass.getName() + "]");
	}

	Class<? extends ProfileValueSource> profileValueSourceType;
	if (config != null) {
		profileValueSourceType = config.value();
	}
	else {
		profileValueSourceType = (Class<? extends ProfileValueSource>) AnnotationUtils.getDefaultValue(annotationType);
		Assert.state(profileValueSourceType != null, "No default ProfileValueSource class");
	}
	if (logger.isDebugEnabled()) {
		logger.debug("Retrieved ProfileValueSource type [" + profileValueSourceType + "] for class [" +
				testClass.getName() + "]");
	}

	ProfileValueSource profileValueSource;
	if (SystemProfileValueSource.class == profileValueSourceType) {
		profileValueSource = SystemProfileValueSource.getInstance();
	}
	else {
		try {
			profileValueSource = ReflectionUtils.accessibleConstructor(profileValueSourceType).newInstance();
		}
		catch (Exception ex) {
			if (logger.isWarnEnabled()) {
				logger.warn("Could not instantiate a ProfileValueSource of type [" + profileValueSourceType +
						"] for class [" + testClass.getName() + "]: using default.", ex);
			}
			profileValueSource = SystemProfileValueSource.getInstance();
		}
	}

	return profileValueSource;
}
 
/**
 * Match the given qualifier annotation against the candidate bean definition.
 */
protected boolean checkQualifier(
		BeanDefinitionHolder bdHolder, Annotation annotation, TypeConverter typeConverter) {

	Class<? extends Annotation> type = annotation.annotationType();
	RootBeanDefinition bd = (RootBeanDefinition) bdHolder.getBeanDefinition();

	AutowireCandidateQualifier qualifier = bd.getQualifier(type.getName());
	if (qualifier == null) {
		qualifier = bd.getQualifier(ClassUtils.getShortName(type));
	}
	if (qualifier == null) {
		// First, check annotation on qualified element, if any
		Annotation targetAnnotation = getQualifiedElementAnnotation(bd, type);
		// Then, check annotation on factory method, if applicable
		if (targetAnnotation == null) {
			targetAnnotation = getFactoryMethodAnnotation(bd, type);
		}
		if (targetAnnotation == null) {
			RootBeanDefinition dbd = getResolvedDecoratedDefinition(bd);
			if (dbd != null) {
				targetAnnotation = getFactoryMethodAnnotation(dbd, type);
			}
		}
		if (targetAnnotation == null) {
			// Look for matching annotation on the target class
			if (getBeanFactory() != null) {
				try {
					Class<?> beanType = getBeanFactory().getType(bdHolder.getBeanName());
					if (beanType != null) {
						targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(beanType), type);
					}
				}
				catch (NoSuchBeanDefinitionException ex) {
					// Not the usual case - simply forget about the type check...
				}
			}
			if (targetAnnotation == null && bd.hasBeanClass()) {
				targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(bd.getBeanClass()), type);
			}
		}
		if (targetAnnotation != null && targetAnnotation.equals(annotation)) {
			return true;
		}
	}

	Map<String, Object> attributes = AnnotationUtils.getAnnotationAttributes(annotation);
	if (attributes.isEmpty() && qualifier == null) {
		// If no attributes, the qualifier must be present
		return false;
	}
	for (Map.Entry<String, Object> entry : attributes.entrySet()) {
		String attributeName = entry.getKey();
		Object expectedValue = entry.getValue();
		Object actualValue = null;
		// Check qualifier first
		if (qualifier != null) {
			actualValue = qualifier.getAttribute(attributeName);
		}
		if (actualValue == null) {
			// Fall back on bean definition attribute
			actualValue = bd.getAttribute(attributeName);
		}
		if (actualValue == null && attributeName.equals(AutowireCandidateQualifier.VALUE_KEY) &&
				expectedValue instanceof String && bdHolder.matchesName((String) expectedValue)) {
			// Fall back on bean name (or alias) match
			continue;
		}
		if (actualValue == null && qualifier != null) {
			// Fall back on default, but only if the qualifier is present
			actualValue = AnnotationUtils.getDefaultValue(annotation, attributeName);
		}
		if (actualValue != null) {
			actualValue = typeConverter.convertIfNecessary(actualValue, expectedValue.getClass());
		}
		if (!expectedValue.equals(actualValue)) {
			return false;
		}
	}
	return true;
}
 
源代码12 项目: java-technology-stack   文件: ProfileValueUtils.java
/**
 * Retrieves the {@link ProfileValueSource} type for the specified
 * {@link Class test class} as configured via the
 * {@link ProfileValueSourceConfiguration
 * &#064;ProfileValueSourceConfiguration} annotation and instantiates a new
 * instance of that type.
 * <p>If {@link ProfileValueSourceConfiguration
 * &#064;ProfileValueSourceConfiguration} is not present on the specified
 * class or if a custom {@link ProfileValueSource} is not declared, the
 * default {@link SystemProfileValueSource} will be returned instead.
 * @param testClass the test class for which the ProfileValueSource should
 * be retrieved
 * @return the configured (or default) ProfileValueSource for the specified
 * class
 * @see SystemProfileValueSource
 */
@SuppressWarnings("unchecked")
public static ProfileValueSource retrieveProfileValueSource(Class<?> testClass) {
	Assert.notNull(testClass, "testClass must not be null");

	Class<ProfileValueSourceConfiguration> annotationType = ProfileValueSourceConfiguration.class;
	ProfileValueSourceConfiguration config = AnnotatedElementUtils.findMergedAnnotation(testClass, annotationType);
	if (logger.isDebugEnabled()) {
		logger.debug("Retrieved @ProfileValueSourceConfiguration [" + config + "] for test class [" +
				testClass.getName() + "]");
	}

	Class<? extends ProfileValueSource> profileValueSourceType;
	if (config != null) {
		profileValueSourceType = config.value();
	}
	else {
		profileValueSourceType = (Class<? extends ProfileValueSource>) AnnotationUtils.getDefaultValue(annotationType);
		Assert.state(profileValueSourceType != null, "No default ProfileValueSource class");
	}
	if (logger.isDebugEnabled()) {
		logger.debug("Retrieved ProfileValueSource type [" + profileValueSourceType + "] for class [" +
				testClass.getName() + "]");
	}

	ProfileValueSource profileValueSource;
	if (SystemProfileValueSource.class == profileValueSourceType) {
		profileValueSource = SystemProfileValueSource.getInstance();
	}
	else {
		try {
			profileValueSource = ReflectionUtils.accessibleConstructor(profileValueSourceType).newInstance();
		}
		catch (Exception ex) {
			if (logger.isWarnEnabled()) {
				logger.warn("Could not instantiate a ProfileValueSource of type [" + profileValueSourceType +
						"] for class [" + testClass.getName() + "]: using default.", ex);
			}
			profileValueSource = SystemProfileValueSource.getInstance();
		}
	}

	return profileValueSource;
}
 
/**
 * Match the given qualifier annotation against the candidate bean definition.
 */
protected boolean checkQualifier(
		BeanDefinitionHolder bdHolder, Annotation annotation, TypeConverter typeConverter) {

	Class<? extends Annotation> type = annotation.annotationType();
	RootBeanDefinition bd = (RootBeanDefinition) bdHolder.getBeanDefinition();

	AutowireCandidateQualifier qualifier = bd.getQualifier(type.getName());
	if (qualifier == null) {
		qualifier = bd.getQualifier(ClassUtils.getShortName(type));
	}
	if (qualifier == null) {
		// First, check annotation on qualified element, if any
		Annotation targetAnnotation = getQualifiedElementAnnotation(bd, type);
		// Then, check annotation on factory method, if applicable
		if (targetAnnotation == null) {
			targetAnnotation = getFactoryMethodAnnotation(bd, type);
		}
		if (targetAnnotation == null) {
			RootBeanDefinition dbd = getResolvedDecoratedDefinition(bd);
			if (dbd != null) {
				targetAnnotation = getFactoryMethodAnnotation(dbd, type);
			}
		}
		if (targetAnnotation == null) {
			// Look for matching annotation on the target class
			if (getBeanFactory() != null) {
				try {
					Class<?> beanType = getBeanFactory().getType(bdHolder.getBeanName());
					if (beanType != null) {
						targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(beanType), type);
					}
				}
				catch (NoSuchBeanDefinitionException ex) {
					// Not the usual case - simply forget about the type check...
				}
			}
			if (targetAnnotation == null && bd.hasBeanClass()) {
				targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(bd.getBeanClass()), type);
			}
		}
		if (targetAnnotation != null && targetAnnotation.equals(annotation)) {
			return true;
		}
	}

	Map<String, Object> attributes = AnnotationUtils.getAnnotationAttributes(annotation);
	if (attributes.isEmpty() && qualifier == null) {
		// If no attributes, the qualifier must be present
		return false;
	}
	for (Map.Entry<String, Object> entry : attributes.entrySet()) {
		String attributeName = entry.getKey();
		Object expectedValue = entry.getValue();
		Object actualValue = null;
		// Check qualifier first
		if (qualifier != null) {
			actualValue = qualifier.getAttribute(attributeName);
		}
		if (actualValue == null) {
			// Fall back on bean definition attribute
			actualValue = bd.getAttribute(attributeName);
		}
		if (actualValue == null && attributeName.equals(AutowireCandidateQualifier.VALUE_KEY) &&
				expectedValue instanceof String && bdHolder.matchesName((String) expectedValue)) {
			// Fall back on bean name (or alias) match
			continue;
		}
		if (actualValue == null && qualifier != null) {
			// Fall back on default, but only if the qualifier is present
			actualValue = AnnotationUtils.getDefaultValue(annotation, attributeName);
		}
		if (actualValue != null) {
			actualValue = typeConverter.convertIfNecessary(actualValue, expectedValue.getClass());
		}
		if (!expectedValue.equals(actualValue)) {
			return false;
		}
	}
	return true;
}
 
/**
 * Match the given qualifier annotation against the candidate bean definition.
 */
protected boolean checkQualifier(
		BeanDefinitionHolder bdHolder, Annotation annotation, TypeConverter typeConverter) {

	Class<? extends Annotation> type = annotation.annotationType();
	RootBeanDefinition bd = (RootBeanDefinition) bdHolder.getBeanDefinition();

	AutowireCandidateQualifier qualifier = bd.getQualifier(type.getName());
	if (qualifier == null) {
		qualifier = bd.getQualifier(ClassUtils.getShortName(type));
	}
	if (qualifier == null) {
		// First, check annotation on qualified element, if any
		Annotation targetAnnotation = getQualifiedElementAnnotation(bd, type);
		// Then, check annotation on factory method, if applicable
		if (targetAnnotation == null) {
			targetAnnotation = getFactoryMethodAnnotation(bd, type);
		}
		if (targetAnnotation == null) {
			RootBeanDefinition dbd = getResolvedDecoratedDefinition(bd);
			if (dbd != null) {
				targetAnnotation = getFactoryMethodAnnotation(dbd, type);
			}
		}
		if (targetAnnotation == null) {
			// Look for matching annotation on the target class
			if (getBeanFactory() != null) {
				try {
					Class<?> beanType = getBeanFactory().getType(bdHolder.getBeanName());
					if (beanType != null) {
						targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(beanType), type);
					}
				}
				catch (NoSuchBeanDefinitionException ex) {
					// Not the usual case - simply forget about the type check...
				}
			}
			if (targetAnnotation == null && bd.hasBeanClass()) {
				targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(bd.getBeanClass()), type);
			}
		}
		if (targetAnnotation != null && targetAnnotation.equals(annotation)) {
			return true;
		}
	}

	Map<String, Object> attributes = AnnotationUtils.getAnnotationAttributes(annotation);
	if (attributes.isEmpty() && qualifier == null) {
		// If no attributes, the qualifier must be present
		return false;
	}
	for (Map.Entry<String, Object> entry : attributes.entrySet()) {
		String attributeName = entry.getKey();
		Object expectedValue = entry.getValue();
		Object actualValue = null;
		// Check qualifier first
		if (qualifier != null) {
			actualValue = qualifier.getAttribute(attributeName);
		}
		if (actualValue == null) {
			// Fall back on bean definition attribute
			actualValue = bd.getAttribute(attributeName);
		}
		if (actualValue == null && attributeName.equals(AutowireCandidateQualifier.VALUE_KEY) &&
				expectedValue instanceof String && bdHolder.matchesName((String) expectedValue)) {
			// Fall back on bean name (or alias) match
			continue;
		}
		if (actualValue == null && qualifier != null) {
			// Fall back on default, but only if the qualifier is present
			actualValue = AnnotationUtils.getDefaultValue(annotation, attributeName);
		}
		if (actualValue != null) {
			actualValue = typeConverter.convertIfNecessary(actualValue, expectedValue.getClass());
		}
		if (!expectedValue.equals(actualValue)) {
			return false;
		}
	}
	return true;
}
 
/**
 * Match the given qualifier annotation against the candidate bean definition.
 */
protected boolean checkQualifier(
		BeanDefinitionHolder bdHolder, Annotation annotation, TypeConverter typeConverter) {

	Class<? extends Annotation> type = annotation.annotationType();
	RootBeanDefinition bd = (RootBeanDefinition) bdHolder.getBeanDefinition();

	AutowireCandidateQualifier qualifier = bd.getQualifier(type.getName());
	if (qualifier == null) {
		qualifier = bd.getQualifier(ClassUtils.getShortName(type));
	}
	if (qualifier == null) {
		// First, check annotation on factory method, if applicable
		Annotation targetAnnotation = getFactoryMethodAnnotation(bd, type);
		if (targetAnnotation == null) {
			RootBeanDefinition dbd = getResolvedDecoratedDefinition(bd);
			if (dbd != null) {
				targetAnnotation = getFactoryMethodAnnotation(dbd, type);
			}
		}
		if (targetAnnotation == null) {
			// Look for matching annotation on the target class
			if (getBeanFactory() != null) {
				Class<?> beanType = getBeanFactory().getType(bdHolder.getBeanName());
				if (beanType != null) {
					targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(beanType), type);
				}
			}
			if (targetAnnotation == null && bd.hasBeanClass()) {
				targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(bd.getBeanClass()), type);
			}
		}
		if (targetAnnotation != null && targetAnnotation.equals(annotation)) {
			return true;
		}
	}

	Map<String, Object> attributes = AnnotationUtils.getAnnotationAttributes(annotation);
	if (attributes.isEmpty() && qualifier == null) {
		// If no attributes, the qualifier must be present
		return false;
	}
	for (Map.Entry<String, Object> entry : attributes.entrySet()) {
		String attributeName = entry.getKey();
		Object expectedValue = entry.getValue();
		Object actualValue = null;
		// Check qualifier first
		if (qualifier != null) {
			actualValue = qualifier.getAttribute(attributeName);
		}
		if (actualValue == null) {
			// Fall back on bean definition attribute
			actualValue = bd.getAttribute(attributeName);
		}
		if (actualValue == null && attributeName.equals(AutowireCandidateQualifier.VALUE_KEY) &&
				expectedValue instanceof String && bdHolder.matchesName((String) expectedValue)) {
			// Fall back on bean name (or alias) match
			continue;
		}
		if (actualValue == null && qualifier != null) {
			// Fall back on default, but only if the qualifier is present
			actualValue = AnnotationUtils.getDefaultValue(annotation, attributeName);
		}
		if (actualValue != null) {
			actualValue = typeConverter.convertIfNecessary(actualValue, expectedValue.getClass());
		}
		if (!expectedValue.equals(actualValue)) {
			return false;
		}
	}
	return true;
}
 
源代码16 项目: spring4-understanding   文件: ProfileValueUtils.java
/**
 * Retrieves the {@link ProfileValueSource} type for the specified
 * {@link Class test class} as configured via the
 * {@link ProfileValueSourceConfiguration
 * &#064;ProfileValueSourceConfiguration} annotation and instantiates a new
 * instance of that type.
 * <p>
 * If {@link ProfileValueSourceConfiguration
 * &#064;ProfileValueSourceConfiguration} is not present on the specified
 * class or if a custom {@link ProfileValueSource} is not declared, the
 * default {@link SystemProfileValueSource} will be returned instead.
 *
 * @param testClass The test class for which the ProfileValueSource should
 * be retrieved
 * @return the configured (or default) ProfileValueSource for the specified
 * class
 * @see SystemProfileValueSource
 */
@SuppressWarnings("unchecked")
public static ProfileValueSource retrieveProfileValueSource(Class<?> testClass) {
	Assert.notNull(testClass, "testClass must not be null");

	Class<ProfileValueSourceConfiguration> annotationType = ProfileValueSourceConfiguration.class;
	ProfileValueSourceConfiguration config = findAnnotation(testClass, annotationType);
	if (logger.isDebugEnabled()) {
		logger.debug("Retrieved @ProfileValueSourceConfiguration [" + config + "] for test class ["
				+ testClass.getName() + "]");
	}

	Class<? extends ProfileValueSource> profileValueSourceType;
	if (config != null) {
		profileValueSourceType = config.value();
	}
	else {
		profileValueSourceType = (Class<? extends ProfileValueSource>) AnnotationUtils.getDefaultValue(annotationType);
	}
	if (logger.isDebugEnabled()) {
		logger.debug("Retrieved ProfileValueSource type [" + profileValueSourceType + "] for class ["
				+ testClass.getName() + "]");
	}

	ProfileValueSource profileValueSource;
	if (SystemProfileValueSource.class == profileValueSourceType) {
		profileValueSource = SystemProfileValueSource.getInstance();
	}
	else {
		try {
			profileValueSource = profileValueSourceType.newInstance();
		}
		catch (Exception e) {
			if (logger.isWarnEnabled()) {
				logger.warn("Could not instantiate a ProfileValueSource of type [" + profileValueSourceType
						+ "] for class [" + testClass.getName() + "]: using default.", e);
			}
			profileValueSource = SystemProfileValueSource.getInstance();
		}
	}

	return profileValueSource;
}
 
/**
 * Match the given qualifier annotation against the candidate bean definition.
 */
protected boolean checkQualifier(
		BeanDefinitionHolder bdHolder, Annotation annotation, TypeConverter typeConverter) {

	Class<? extends Annotation> type = annotation.annotationType();
	RootBeanDefinition bd = (RootBeanDefinition) bdHolder.getBeanDefinition();

	AutowireCandidateQualifier qualifier = bd.getQualifier(type.getName());
	if (qualifier == null) {
		qualifier = bd.getQualifier(ClassUtils.getShortName(type));
	}
	if (qualifier == null) {
		// First, check annotation on factory method, if applicable
		Annotation targetAnnotation = getFactoryMethodAnnotation(bd, type);
		if (targetAnnotation == null) {
			RootBeanDefinition dbd = getResolvedDecoratedDefinition(bd);
			if (dbd != null) {
				targetAnnotation = getFactoryMethodAnnotation(dbd, type);
			}
		}
		if (targetAnnotation == null) {
			// Look for matching annotation on the target class
			if (getBeanFactory() != null) {
				try {
					Class<?> beanType = getBeanFactory().getType(bdHolder.getBeanName());
					if (beanType != null) {
						targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(beanType), type);
					}
				}
				catch (NoSuchBeanDefinitionException ex) {
					// Not the usual case - simply forget about the type check...
				}
			}
			if (targetAnnotation == null && bd.hasBeanClass()) {
				targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(bd.getBeanClass()), type);
			}
		}
		if (targetAnnotation != null && targetAnnotation.equals(annotation)) {
			return true;
		}
	}

	Map<String, Object> attributes = AnnotationUtils.getAnnotationAttributes(annotation);
	if (attributes.isEmpty() && qualifier == null) {
		// If no attributes, the qualifier must be present
		return false;
	}
	for (Map.Entry<String, Object> entry : attributes.entrySet()) {
		String attributeName = entry.getKey();
		Object expectedValue = entry.getValue();
		Object actualValue = null;
		// Check qualifier first
		if (qualifier != null) {
			actualValue = qualifier.getAttribute(attributeName);
		}
		if (actualValue == null) {
			// Fall back on bean definition attribute
			actualValue = bd.getAttribute(attributeName);
		}
		if (actualValue == null && attributeName.equals(AutowireCandidateQualifier.VALUE_KEY) &&
				expectedValue instanceof String && bdHolder.matchesName((String) expectedValue)) {
			// Fall back on bean name (or alias) match
			continue;
		}
		if (actualValue == null && qualifier != null) {
			// Fall back on default, but only if the qualifier is present
			actualValue = AnnotationUtils.getDefaultValue(annotation, attributeName);
		}
		if (actualValue != null) {
			actualValue = typeConverter.convertIfNecessary(actualValue, expectedValue.getClass());
		}
		if (!expectedValue.equals(actualValue)) {
			return false;
		}
	}
	return true;
}