Created
June 21, 2018 06:09
-
-
Save xie-qianyue/84ac46be439f4aa64362e3f1d9d127e7 to your computer and use it in GitHub Desktop.
Using BeanDefinitionRegistryPostProcessor to register bean
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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