code: @Override
  	public void registerBeanDefinitions(final AnnotationMetadata importingClassMetadata,
  			final BeanDefinitionRegistry registry) {
  
  		Map<String, Object> componentScan = importingClassMetadata
  				.getAnnotationAttributes(RemoteApplicationEventScan.class.getName(),
  						false);
  
  		Set<String> basePackages = new HashSet<>();
  		for (String pkg : (String[]) componentScan.get("value")) {
  			if (StringUtils.hasText(pkg)) {
  				basePackages.add(pkg);
  			}
  		}
  		for (String pkg : (String[]) componentScan.get("basePackages")) {
  			if (StringUtils.hasText(pkg)) {
  				basePackages.add(pkg);
  			}
  		}
  		for (Class<?> clazz : (Class[]) componentScan.get("basePackageClasses")) {
  			basePackages.add(ClassUtils.getPackageName(clazz));
  		}
  
  		if (basePackages.isEmpty()) {
  			basePackages.add(
  					ClassUtils.getPackageName(importingClassMetadata.getClassName()));
  		}
  
  		BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder
  				.genericBeanDefinition(BusJacksonMessageConverter.class);
  		beanDefinitionBuilder.addPropertyValue("packagesToScan",
  				basePackages.toArray(new String[basePackages.size()]));
  		AbstractBeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition();
  
  		BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition,
  				"busJsonConverter");
  		BeanDefinitionReaderUtils.registerBeanDefinition(holder, registry);
  	}
docs: patterned after Spring Integration IntegrationComponentScanRegistrar