spring扩展点一:BeanDefinitionRegistryPostProcessor在框架中的应用

本文详细介绍了mybatis在与spring整合过程中如何利用BeanDefinitionRegistryPostProcessor扩展点,扫描并管理mapper接口。mybatis通过mybatis-spring-2.x.jar中的MapperScannerConfigurer,设置beanDefinition属性,实现接口的动态代理注入,避免了与spring的强耦合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上篇笔记主要记录了BeanDefinitionRegistryPostProcessor扩展机制的实现原理,这篇笔记注意记录下,自己在学习源码的过程中,看到的该扩展机制使用的地方

其实我上篇笔记有说过,这个扩展机制,太靠前,如果我们通过@Component注解去注入到spring容器中,那我们自定义的实现类是在所有的业务bean还没有放到spring容器中的时候,就执行了,此时一般也很少有业务需求是在这个时候对beanDefinition进行一些修改,但是,在底层框架中,有可能会用到这个扩展点,我看到的是mybatis底层有用到这个扩展点

mybatis是干什么的

其实mybatis就是一个持久层框架,在和spring整合的时候,简单来说,我觉得就做了一件事情,将我们程序员自己写的mapper接口交给spring去管理
但是需要想一下,一个接口,怎么交给spring去管理?这里面的一个设计思想,我觉得是值得学习的:对于spring来说,不会为了去整合mybatis而去修改自己的代码,那原生的mybatis会修改吗?当然也不会,因为mybatis如果只是为了整合spring,修改了自己的代码,那mybatis就不是mybatis了,那怎么办呢?两者想要结合,总要有一个中间粘合剂,那这时候,spring就说了,你既然想和我进行整合,那你自己去扩展一个jar包,专门负责和我spring整合用,你可以利用我暴露给你的扩展点,总之,我不管你怎么做,你只要把你的接口放到我的beanDefinitionMap中,就可以了,我负责去初始化,然后放到容器中,至于你怎么把mapper接口放到我的beanDefinitionMap,我不管
那这时候,mybatis就自己去实现类一个jar包:mybatis-spring-1.3.2.jar
也就是在这个jar包中,mybatis利用了spring的BeanDefinitionRegistryPostProcessor这个扩展点,去把我们程序员提供的mapper接口,放入到了beanDefinitionMap中

mybatis整合spring原理

我们在使用mybatis的时候,需要加一个注解,@MapperScan,在该注解中,指定要扫描的路径,这个路径是给谁用的?就是给我们这篇笔记要学习的BeanDefinitionRegistryPostProcessor的实现类MapperScannerConfigurer
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值