Support meta @Component with non-string value
Update AnnotationBeanNameGenerator to only use the value attribute of a @Component meta-annotated annotation when it is a String. Issue: SPR-10580
This commit is contained in:
parent
5377fae7f5
commit
a8fd832818
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -117,7 +117,10 @@ public class AnnotationBeanNameGenerator implements BeanNameGenerator {
|
|||
(metaAnnotationTypes != null && metaAnnotationTypes.contains(COMPONENT_ANNOTATION_CLASSNAME)) ||
|
||||
annotationType.equals("javax.annotation.ManagedBean") ||
|
||||
annotationType.equals("javax.inject.Named");
|
||||
return (isStereotype && attributes != null && attributes.containsKey("value"));
|
||||
|
||||
return (isStereotype && attributes != null &&
|
||||
attributes.containsKey("value") &&
|
||||
attributes.get("value") instanceof String);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -16,16 +16,21 @@
|
|||
|
||||
package org.springframework.context.annotation;
|
||||
|
||||
import example.scannable.DefaultNamedComponent;
|
||||
import org.junit.Test;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;
|
||||
import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.SimpleBeanDefinitionRegistry;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import example.scannable.DefaultNamedComponent;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
|
@ -81,6 +86,22 @@ public class AnnotationBeanNameGeneratorTests {
|
|||
assertEquals(expectedGeneratedBeanName, beanName);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateBeanNameFromMetaComponentWithStringValue() {
|
||||
BeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
|
||||
AnnotatedBeanDefinition bd = new AnnotatedGenericBeanDefinition(ComponentFromStringMeta.class);
|
||||
String beanName = this.beanNameGenerator.generateBeanName(bd, registry);
|
||||
assertEquals("henry", beanName);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateBeanNameFromMetaComponentWithNonStringValue() {
|
||||
BeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
|
||||
AnnotatedBeanDefinition bd = new AnnotatedGenericBeanDefinition(ComponentFromNonStringMeta.class);
|
||||
String beanName = this.beanNameGenerator.generateBeanName(bd, registry);
|
||||
assertEquals("annotationBeanNameGeneratorTests.ComponentFromNonStringMeta", beanName);
|
||||
}
|
||||
|
||||
|
||||
@Component("walden")
|
||||
private static class ComponentWithName {
|
||||
|
@ -96,4 +117,19 @@ public class AnnotationBeanNameGeneratorTests {
|
|||
private static class AnonymousComponent {
|
||||
}
|
||||
|
||||
@Service("henry")
|
||||
private static class ComponentFromStringMeta {
|
||||
}
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
@Component
|
||||
public @interface NonStringMetaComponent {
|
||||
long value();
|
||||
}
|
||||
|
||||
@NonStringMetaComponent(123)
|
||||
private static class ComponentFromNonStringMeta {
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue