Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save xie-qianyue/84ac46be439f4aa64362e3f1d9d127e7 to your computer and use it in GitHub Desktop.
Save xie-qianyue/84ac46be439f4aa64362e3f1d9d127e7 to your computer and use it in GitHub Desktop.
Using BeanDefinitionRegistryPostProcessor to register bean
@Component
@Slf4j
public class PersonBeanDefinitionRegistryPostProcessor
implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)
throws BeansException {
// 注册Bean定义,容器根据定义返回bean
log.info("register personManager1>>>>>>>>>>>>>>>>");
//构造bean定义
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder
.genericBeanDefinition(PersonManager.class);
//设置依赖
beanDefinitionBuilder.addPropertyReference("personDao", "personDao");
BeanDefinition personManagerBeanDefinition = beanDefinitionBuilder
.getRawBeanDefinition();
//注册bean定义
registry.registerBeanDefinition("personManager1", personManagerBeanDefinition);
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
throws BeansException {
// 注册Bean实例,使用supply接口
log.info("register personManager2>>>>>>>>>>>>>>>>");
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder
.genericBeanDefinition(PersonManager.class, () -> {
PersonDao personDao = beanFactory.getBean(PersonDao.class);
PersonManager personManager = new PersonManager();
personManager.setPersonDao(personDao);
return personManager;
});
BeanDefinition personManagerBeanDefinition = beanDefinitionBuilder
.getRawBeanDefinition();
((DefaultListableBeanFactory) beanFactory)
.registerBeanDefinition("personManager2", personManagerBeanDefinition);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment