@Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { AnnotationAttributes attributes = AnnotationAttributes.fromMap( importingClassMetadata.getAnnotationAttributes(EnableDubboConfigBindings.class.getName())); AnnotationAttributes[] annotationAttributes = attributes.getAnnotationArray("value"); DubboConfigBindingRegistrar registrar = new DubboConfigBindingRegistrar(); registrar.setEnvironment(environment); for (AnnotationAttributes element : annotationAttributes) { registrar.registerBeanDefinitions(element, registry); } }
@Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { AnnotationAttributes attributes = AnnotationAttributes.fromMap( importingClassMetadata.getAnnotationAttributes(EnableDubboConfigBindings.class.getName())); AnnotationAttributes[] annotationAttributes = attributes.getAnnotationArray("value"); DubboConfigBindingRegistrar registrar = new DubboConfigBindingRegistrar(); registrar.setEnvironment(environment); for (AnnotationAttributes element : annotationAttributes) { registrar.registerBeanDefinitions(element, registry); } }
@Test public void findMergedAnnotationAttributesOnClassWithAttributeAliasInComposedAnnotationAndNestedAnnotationsInTargetAnnotation() { AnnotationAttributes attributes = assertComponentScanAttributes(TestComponentScanClass.class, "com.example.app.test"); Filter[] excludeFilters = attributes.getAnnotationArray("excludeFilters", Filter.class); assertNotNull(excludeFilters); List<String> patterns = stream(excludeFilters).map(Filter::pattern).collect(toList()); assertEquals(asList("*Test", "*Tests"), patterns); }
@Test public void getAnnotationAttributesWithNestedAnnotations() { ComponentScan componentScan = ComponentScanClass.class.getAnnotation(ComponentScan.class); assertNotNull(componentScan); AnnotationAttributes attributes = getAnnotationAttributes(ComponentScanClass.class, componentScan); assertNotNull(attributes); assertEquals(ComponentScan.class, attributes.annotationType()); Filter[] filters = attributes.getAnnotationArray("excludeFilters", Filter.class); assertNotNull(filters); List<String> patterns = stream(filters).map(Filter::pattern).collect(toList()); assertEquals(asList("*Foo", "*Bar"), patterns); }
for (AnnotationAttributes filter : componentScan.getAnnotationArray("includeFilters")) { for (TypeFilter typeFilter : typeFiltersFor(filter)) { scanner.addIncludeFilter(typeFilter); for (AnnotationAttributes filter : componentScan.getAnnotationArray("excludeFilters")) { for (TypeFilter typeFilter : typeFiltersFor(filter)) { scanner.addExcludeFilter(typeFilter);
@Test public void nestedAnnotations() throws Exception { Filter filter = FilteredClass.class.getAnnotation(Filter.class); attributes.put("filter", filter); attributes.put("filters", new Filter[] {filter, filter}); Filter retrievedFilter = attributes.getAnnotation("filter", Filter.class); assertThat(retrievedFilter, equalTo(filter)); assertThat(retrievedFilter.pattern(), equalTo("foo")); Filter[] retrievedFilters = attributes.getAnnotationArray("filters", Filter.class); assertNotNull(retrievedFilters); assertEquals(2, retrievedFilters.length); assertThat(retrievedFilters[1].pattern(), equalTo("foo")); }
for (AnnotationAttributes filter : componentScan.getAnnotationArray("includeFilters")) { for (TypeFilter typeFilter : typeFiltersFor(filter)) { scanner.addIncludeFilter(typeFilter); for (AnnotationAttributes filter : componentScan.getAnnotationArray("excludeFilters")) { for (TypeFilter typeFilter : typeFiltersFor(filter)) { scanner.addExcludeFilter(typeFilter);
@Test public void singleElementToSingleElementArrayConversionSupport() throws Exception { Filter filter = FilteredClass.class.getAnnotation(Filter.class); AnnotationAttributes nestedAttributes = new AnnotationAttributes(); nestedAttributes.put("name", "Dilbert"); // Store single elements attributes.put("names", "Dogbert"); attributes.put("classes", Number.class); attributes.put("nestedAttributes", nestedAttributes); attributes.put("filters", filter); // Get back arrays of single elements assertThat(attributes.getStringArray("names"), equalTo(new String[] {"Dogbert"})); assertThat(attributes.getClassArray("classes"), equalTo(new Class<?>[] {Number.class})); AnnotationAttributes[] array = attributes.getAnnotationArray("nestedAttributes"); assertNotNull(array); assertThat(array.length, is(1)); assertThat(array[0].getString("name"), equalTo("Dilbert")); Filter[] filters = attributes.getAnnotationArray("filters", Filter.class); assertNotNull(filters); assertThat(filters.length, is(1)); assertThat(filters[0].pattern(), equalTo("foo")); }
assertArrayEquals(new Class<?>[] {String.class}, (Class<?>[]) nestedAnno.get("classArray")); AnnotationAttributes[] nestedAnnoArray = specialAttrs.getAnnotationArray("nestedAnnoArray"); assertThat(nestedAnnoArray.length, is(2)); assertThat(nestedAnnoArray[0].getString("value"), is("default")); assertArrayEquals(new Class<?>[] {Void.class}, optional.getClassArray("classArray")); AnnotationAttributes[] optionalArray = specialAttrs.getAnnotationArray("optionalArray"); assertThat(optionalArray.length, is(1)); assertThat(optionalArray[0].getString("value"), is("optional")); assertArrayEquals(new String[] { String.class.getName() }, nestedAnno.getStringArray("classArray")); AnnotationAttributes[] nestedAnnoArray = specialAttrs.getAnnotationArray("nestedAnnoArray"); assertArrayEquals(new String[] { Void.class.getName() }, (String[]) nestedAnnoArray[0].get("classArray")); assertArrayEquals(new String[] { Void.class.getName() }, nestedAnnoArray[0].getStringArray("classArray")); assertArrayEquals(new String[] { Void.class.getName() }, optional.getStringArray("classArray")); AnnotationAttributes[] optionalArray = specialAttrs.getAnnotationArray("optionalArray"); assertArrayEquals(new String[] { Void.class.getName() }, (String[]) optionalArray[0].get("classArray")); assertArrayEquals(new String[] { Void.class.getName() }, optionalArray[0].getStringArray("classArray"));
@Test public void typeSafeAttributeAccess() { AnnotationAttributes nestedAttributes = new AnnotationAttributes(); nestedAttributes.put("value", 10); nestedAttributes.put("name", "algernon"); attributes.put("name", "dave"); attributes.put("names", new String[] {"dave", "frank", "hal"}); attributes.put("bool1", true); attributes.put("bool2", false); attributes.put("color", Color.RED); attributes.put("class", Integer.class); attributes.put("classes", new Class<?>[] {Number.class, Short.class, Integer.class}); attributes.put("number", 42); attributes.put("anno", nestedAttributes); attributes.put("annoArray", new AnnotationAttributes[] {nestedAttributes}); assertThat(attributes.getString("name"), equalTo("dave")); assertThat(attributes.getStringArray("names"), equalTo(new String[] {"dave", "frank", "hal"})); assertThat(attributes.getBoolean("bool1"), equalTo(true)); assertThat(attributes.getBoolean("bool2"), equalTo(false)); assertThat(attributes.<Color>getEnum("color"), equalTo(Color.RED)); assertTrue(attributes.getClass("class").equals(Integer.class)); assertThat(attributes.getClassArray("classes"), equalTo(new Class<?>[] {Number.class, Short.class, Integer.class})); assertThat(attributes.<Integer>getNumber("number"), equalTo(42)); assertThat(attributes.getAnnotation("anno").<Integer>getNumber("value"), equalTo(10)); assertThat(attributes.getAnnotationArray("annoArray")[0].getString("name"), equalTo("algernon")); }
private static boolean isDefaultComponentScan( AnnotationAttributes componentScan ) { String resourcePattern = componentScan.getString( "resourcePattern" ); AnnotationAttributes[] includeFilters = componentScan.getAnnotationArray( "includeFilters" ); AnnotationAttributes[] excludeFilters = componentScan.getAnnotationArray( "excludeFilters" ); return DEFAULT_RESOURCE_PATTERN.equals( resourcePattern ) && includeFilters.length == 0 && excludeFilters.length == 0; }
private Set<TypeFilter> parseFilters(String attributeName) { Set<TypeFilter> result = new HashSet<>(); AnnotationAttributes[] filters = attributes.getAnnotationArray(attributeName); for (AnnotationAttributes filter : filters) { result.addAll(typeFiltersFor(filter)); } return result; }
@Bean public CachingConfigurer cachingConfigurer(AmazonElastiCache amazonElastiCache, ResourceIdResolver resourceIdResolver, List<CacheFactory> cacheFactories) { if (this.annotationAttributes != null && this.annotationAttributes.getAnnotationArray("value").length > 0) { return new ElastiCacheCacheConfigurer(amazonElastiCache, resourceIdResolver, getCacheNamesFromCacheClusterConfigs(this.annotationAttributes.getAnnotationArray("value")), cacheFactories); } else { return new ElastiCacheCacheConfigurer(amazonElastiCache, resourceIdResolver, getConfiguredCachesInStack(), cacheFactories); } }
@Bean public CachingConfigurer cachingConfigurer(AmazonElastiCache amazonElastiCache, ResourceIdResolver resourceIdResolver, List<CacheFactory> cacheFactories) { if (this.annotationAttributes != null && this.annotationAttributes.getAnnotationArray("value").length > 0) { return new ElastiCacheCacheConfigurer(amazonElastiCache, resourceIdResolver, getCacheNamesFromCacheClusterConfigs(this.annotationAttributes.getAnnotationArray("value")), cacheFactories); } else { return new ElastiCacheCacheConfigurer(amazonElastiCache, resourceIdResolver, getConfiguredCachesInStack(), cacheFactories); } }
@Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { if (importingClassMetadata.hasAnnotation(EnableDiskStores.class.getName())) { AnnotationAttributes enableDiskStoresAttributes = AnnotationAttributes.fromMap( importingClassMetadata.getAnnotationAttributes(EnableDiskStores.class.getName())); AnnotationAttributes[] diskStores = enableDiskStoresAttributes.getAnnotationArray("diskStores"); stream(nullSafeArray(diskStores, AnnotationAttributes.class)).forEach(diskStoreAttributes -> registerDiskStoreBeanDefinition( mergeDiskStoreAttributes(enableDiskStoresAttributes, diskStoreAttributes), registry)); } }
protected ManagedList<BeanDefinition> parseDiskStoreDirectories(AnnotationAttributes enableDiskStoreAttributes) { AnnotationAttributes[] diskDirectories = enableDiskStoreAttributes.getAnnotationArray("diskDirectories"); ManagedList<BeanDefinition> diskDirectoryBeans = new ManagedList<>(diskDirectories.length); stream(nullSafeArray(diskDirectories, AnnotationAttributes.class)).forEach(diskDirectoryAttributes -> diskDirectoryBeans.add(newDiskStoreDirectoryBean(diskDirectoryAttributes.getString("location"), diskDirectoryAttributes.getNumber("maxSize")))); return diskDirectoryBeans; }
@Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { if (importingClassMetadata.hasAnnotation(EnableDiskStores.class.getName())) { AnnotationAttributes enableDiskStoresAttributes = AnnotationAttributes.fromMap( importingClassMetadata.getAnnotationAttributes(EnableDiskStores.class.getName())); AnnotationAttributes[] diskStores = enableDiskStoresAttributes.getAnnotationArray("diskStores"); stream(nullSafeArray(diskStores, AnnotationAttributes.class)).forEach(diskStoreAttributes -> registerDiskStoreBeanDefinition( mergeDiskStoreAttributes(enableDiskStoresAttributes, diskStoreAttributes), registry)); } }
@Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { AnnotationAttributes attributes = AnnotationAttributes.fromMap( importingClassMetadata.getAnnotationAttributes(EnableDubboConfigBindings.class.getName())); AnnotationAttributes[] annotationAttributes = attributes.getAnnotationArray("value"); DubboConfigBindingRegistrar registrar = new DubboConfigBindingRegistrar(); registrar.setEnvironment(environment); for (AnnotationAttributes element : annotationAttributes) { registrar.registerBeanDefinitions(element, registry); } }
@Bean @ConditionalOnClass("org.springframework.data.redis.connection.RedisConnectionFactory") public RedisCacheFactory redisCacheFactory() { RedisCacheFactory redisCacheFactory = new RedisCacheFactory(); redisCacheFactory.setExpiryTimePerCache(getExpiryTimePerCacheFromAnnotationConfig( this.annotationAttributes.getAnnotationArray(CACHE_CLUSTER_CONFIG_ATTRIBUTE_NAME))); redisCacheFactory.setExpiryTime(this.annotationAttributes.<Integer>getNumber(DEFAULT_EXPIRY_TIME_ATTRIBUTE_NAME)); return redisCacheFactory; }
@Bean @ConditionalOnClass("net.spy.memcached.MemcachedClient") public MemcachedCacheFactory memcachedCacheFactory() { MemcachedCacheFactory redisCacheFactory = new MemcachedCacheFactory(); redisCacheFactory.setExpiryTimePerCache(getExpiryTimePerCacheFromAnnotationConfig( this.annotationAttributes.getAnnotationArray(CACHE_CLUSTER_CONFIG_ATTRIBUTE_NAME))); redisCacheFactory.setExpiryTime(this.annotationAttributes.<Integer>getNumber(DEFAULT_EXPIRY_TIME_ATTRIBUTE_NAME)); return redisCacheFactory; }