Reworked so that multiple @RemoteApplicationScan annotations work together
fixes gh-214
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.cloud.bus.jackson;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -35,6 +36,10 @@ import org.springframework.util.StringUtils;
|
||||
*/
|
||||
public class RemoteApplicationEventRegistrar implements ImportBeanDefinitionRegistrar {
|
||||
|
||||
private static final String PACKAGES_TO_SCAN = "packagesToScan";
|
||||
|
||||
private static final String BUS_JSON_CONVERTER = "busJsonConverter";
|
||||
|
||||
// patterned after Spring Integration IntegrationComponentScanRegistrar
|
||||
|
||||
@Override
|
||||
@@ -65,15 +70,37 @@ public class RemoteApplicationEventRegistrar implements ImportBeanDefinitionRegi
|
||||
ClassUtils.getPackageName(importingClassMetadata.getClassName()));
|
||||
}
|
||||
|
||||
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder
|
||||
.genericBeanDefinition(BusJacksonMessageConverter.class);
|
||||
beanDefinitionBuilder.addPropertyValue("packagesToScan",
|
||||
basePackages.toArray(new String[basePackages.size()]));
|
||||
AbstractBeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition();
|
||||
if (!registry.containsBeanDefinition(BUS_JSON_CONVERTER)) {
|
||||
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder
|
||||
.genericBeanDefinition(BusJacksonMessageConverter.class);
|
||||
beanDefinitionBuilder.addPropertyValue(PACKAGES_TO_SCAN,
|
||||
basePackages.toArray(new String[basePackages.size()]));
|
||||
AbstractBeanDefinition beanDefinition = beanDefinitionBuilder
|
||||
.getBeanDefinition();
|
||||
|
||||
BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition,
|
||||
"busJsonConverter");
|
||||
BeanDefinitionReaderUtils.registerBeanDefinition(holder, registry);
|
||||
BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition,
|
||||
BUS_JSON_CONVERTER);
|
||||
BeanDefinitionReaderUtils.registerBeanDefinition(holder, registry);
|
||||
}
|
||||
else {
|
||||
basePackages.addAll(getEarlierPackagesToScan(registry));
|
||||
registry.getBeanDefinition(BUS_JSON_CONVERTER).getPropertyValues()
|
||||
.addPropertyValue(PACKAGES_TO_SCAN,
|
||||
basePackages.toArray(new String[basePackages.size()]));
|
||||
}
|
||||
}
|
||||
|
||||
private Set<String> getEarlierPackagesToScan(final BeanDefinitionRegistry registry) {
|
||||
if (registry.containsBeanDefinition(BUS_JSON_CONVERTER)
|
||||
&& registry.getBeanDefinition(BUS_JSON_CONVERTER).getPropertyValues()
|
||||
.get(PACKAGES_TO_SCAN) != null) {
|
||||
String[] earlierValues = (String[]) registry
|
||||
.getBeanDefinition(BUS_JSON_CONVERTER).getPropertyValues()
|
||||
.get(PACKAGES_TO_SCAN);
|
||||
return new HashSet<>(Arrays.asList(earlierValues));
|
||||
}
|
||||
|
||||
return new HashSet<>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ import org.springframework.cloud.bus.jackson.SubtypeModuleTests.AnotherRemoteApp
|
||||
import org.springframework.cloud.bus.jackson.SubtypeModuleTests.MyRemoteApplicationEvent;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -149,12 +150,18 @@ public class RemoteApplicationEventScanTests {
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@RemoteApplicationEventScan(
|
||||
basePackages = { "com.acme", "test.foo.bar", "fizz.buzz" })
|
||||
@Import(ExtraBasePackagesConfig.class)
|
||||
@RemoteApplicationEventScan(basePackages = { "com.acme", "test.foo.bar" })
|
||||
static class BasePackagesConfig {
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@RemoteApplicationEventScan(basePackages = { "fizz.buzz" })
|
||||
static class ExtraBasePackagesConfig {
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@RemoteApplicationEventScan(basePackageClasses = TestRemoteApplicationEvent.class)
|
||||
static class BasePackageClassesConfig {
|
||||
|
||||
Reference in New Issue
Block a user