BeanDefinitionRegistryPostProcessor

最近在看spring集成mybatis的代码,发现MapperScannerConfigurer实现了BeanDefinitionRegistryPostProcessor接口:
https://note.youdao.com/yws/api/personal/file/WEBa24a78aef4df6b599c4ce39aa6bc3793?method=download&shareKey=45c85ebe0bc29b92a3974fe01dfc2907
很好奇BeanDefinitionRegistryPostProcessor有什么作用呢,看看MapperScannerConfigurer中postProcessBeanDefinitionRegistry方法的调用关系:
https://note.youdao.com/yws/api/personal/file/WEB0953656002f6854bcec5c8b3ac3c3bca?method=download&shareKey=d188a0d1464e113dee8d917687a83cfa
原来是在org.springframework.context.support.AbstractApplicationContext#refresh方法中调用的:

//Register bean processors that intercept bean creation.
registerBeanPostProcessors(beanFactory);

该方法是让我们自定义的注册bean,下面来实现自定义bean并注册到BeanDefinitionRegistry:

/**
 * @author LiosWong
 * @description
 * @date 2018/9/5 下午10:14
 */
@Component
public class TestPostProcessorRegistration implements BeanDefinitionRegistryPostProcessor{
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        //创建BeanDefinitionBuilder
        BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(UserInfoEntity.class);
        //设置属性值
        builder.addPropertyValue("name","list_test");
        //设置可通过@Autowire注解引用
        builder.setAutowireMode(AUTOWIRE_BY_NAME
        //注册到BeanDefinitionRegistry
        registry.registerBeanDefinition("userInfoEntity",builder.getBeanDefinition());
    }
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

    }
}

Test:

@RestController
public class OkController {
    @Autowired
    UserInfoEntity userInfoEntity;
    @GetMapping(value = "/ok")
    public String  ok(){
        return userInfoEntity.getName();
    }

返回的是lios_test,至此完成了自定义bean并成功使用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值