@Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { Collection<Class<?>> remotingServices = new HashSet<Class<?>>(); remotingServices.addAll(getIncludeClasses()); String[] basePackages = getBasePackages(); if (basePackages != null) remotingServices.addAll(ClassScanner.scanAnnotated(basePackages, Remoting.class)); Collection<Class<?>> excludeRemotingServices = getExcludeClasses(); for (Class<?> remotingService : remotingServices) { if (!remotingService.isInterface() || excludeRemotingServices.contains(remotingService)) continue; String beanName = StringUtils.uncapitalize(remotingService.getSimpleName()); if (registry.containsBeanDefinition(beanName)) { logger.info( "Skip bean {} which implemented by {}", beanName, registry.getBeanDefinition(beanName).getBeanClassName()); continue; } RootBeanDefinition beanDefinition = new RootBeanDefinition(HttpInvokerClient.class); beanDefinition.setTargetType(remotingService); beanDefinition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_NAME); MutablePropertyValues propertyValues = new MutablePropertyValues(); propertyValues.addPropertyValue("serviceInterface", remotingService.getName()); beanDefinition.setPropertyValues(propertyValues); registry.registerBeanDefinition(beanName, beanDefinition); logger.info("Registered bean {} for remoting service", beanName); } }