动态注册Bean到Spring容器是很简单的,咱们只要继承BeanDefinitionRegistryPostProcessorjava
@Component public class TestDynamicRegistBean implements BeanDefinitionRegistryPostProcessor { @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { System.out.println("yzy:TestDynamicRegistBean.postProcessBeanDefinitionRegistry"); GenericBeanDefinition beanDefinition = new GenericBeanDefinition(); beanDefinition.setBeanClass(User.class); beanDefinition.getPropertyValues().add("name", "yangzhongyu"); registry.registerBeanDefinition("user", beanDefinition); } }
还能够重载postProcessBeanFactory来完成一样的事情,注册User user 到Spring容器。ide
@Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException{ System.out.println("yzy:TestDynamicRegistBean.postProcessBeanFactory"); GenericBeanDefinition beanDefinition = new GenericBeanDefinition(); beanDefinition.setBeanClass(User.class); beanDefinition.getPropertyValues().add("age", "yangzhongyu"); ((DefaultListableBeanFactory) beanFactory) .registerBeanDefinition("user", beanDefinition); }
MyBatis,Dubbo等采用了这个技术来实现Bean的动态注册.post