@SuppressWarnings("rawtypes")
	@Override
	public void postProcessBeanFactory(
			ConfigurableListableBeanFactory beanFactory) throws BeansException {
		BeanFactory bf = beanFactory;
		do {
			if (LOGGER.isDebugEnabled())
				LOGGER.debug("Scan from factory: {}", bf);

			String beanDefinitionNames[] = ((ListableBeanFactory) bf)
					.getBeanDefinitionNames();
			String as[];
			int j = (as = beanDefinitionNames).length;
			for (int i = 0; i < j; i++) {
				String name = as[i];
				BeanDefinition beanDefinition = ((ConfigurableListableBeanFactory) bf)
						.getBeanDefinition(name);
				String clazz = beanDefinition.getBeanClassName();

				if (LOGGER.isDebugEnabled())
					LOGGER.debug("###########Found class: {} ", clazz);

				if (clazz != null) {
					Class serviceInterface = getServiceInterface(clazz,
							beanFactory.getBeanClassLoader());
					if (serviceInterface != null) {
						Remote annotationClazz = (Remote) AnnotationUtils
								.findAnnotation(serviceInterface, Remote.class);
						String remotingName = (new StringBuilder("/")).append(
								getDefaultName(serviceInterface)).toString();
						if (!StringUtils.isEmpty(annotationClazz.name()))
							remotingName = (new StringBuilder("/")).append(
									annotationClazz.name()).toString();

						if (LOGGER.isDebugEnabled())
							LOGGER.debug(
									"###########Registering service class {} with name {}",
									clazz, remotingName);

						BeanDefinition bd = createExporterBeanDefinition(
								remotingName, name, serviceInterface,
								annotationClazz.exposer());
						((DefaultListableBeanFactory) beanFactory)
								.registerBeanDefinition(remotingName, bd);
					}
				}
			}

		} while ((bf = ((HierarchicalBeanFactory) bf).getParentBeanFactory()) != null);

		if (LOGGER.isDebugEnabled())
			LOGGER.debug("#########################################postProcessBeanFactory SUCCESS...");

	}