String beanName = packageName + "." + simpleName + clientSuffix;
String factoryBeanName = packageName + "." + simpleName + clientFactorySuffix;
// register client bean
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(marshallingServiceClass);
beanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON);
beanDefinition.setFactoryBeanName(factoryBeanName);
beanDefinition.setFactoryMethodName("getBean");
registry.registerBeanDefinition(beanName, beanDefinition);
// register client factory bean
GenericBeanDefinition factoryBeanDefinition = new GenericBeanDefinition();
factoryBeanDefinition.setBeanClass(RestClientFactoryBean.class);
factoryBeanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON);
MutablePropertyValues values = new MutablePropertyValues();
values.addPropertyValue("marshallingServiceClass", marshallingServiceClass);
factoryBeanDefinition.setPropertyValues(values);
registry.registerBeanDefinition(factoryBeanName, factoryBeanDefinition);
}