阅读 218

SpringBoot的EnableJpaRepositories原理解析

今天我们来深入学习下jpa,凡事多问个为什么?你为什么眼睛常含泪水,因为我对这片土地爱的深沉。

所以,今天我们来爱一个jpa,为什么你自己定义个Repository,就能使用crud方法,那肯定是因为别的类抗下了所有。

Repository Bean创建分析

我們在使用的時候在类上标记了这样一个注解@EnableJpaRepositories ,我们来点进去看看这个类。

image.png这里有一个JpaRepositoryFactoryBean,FactoryBean和BeanFactory有啥区别?哈哈,我理解FactoryBean创建的是工厂的Bean对象,BeanFactory创建的是普通Bean对象。

然后我们点进去,看到一个do方法,image.png

然后会给我们创建一个RepositoryFactorySupport

image.png

那问题来了,这个方法什么时候调用呢,我们可以看到这个方法afterPropertiesSet() :

这个方法就是当Bean对象初始化的时候,调用的,用来设置一些参数值,我们来看看里面干了什么:

image.png

只是进行了一个判空,然后调用父类的方法,ok,我们接着跟一下:

image.png

这里创建了一个对象,就是调用我们之前提到的方法。这里面还给非常多的参数赋值,赋值之后呢,我们看到了这样的获取方法:

image.png

这个方法就是获取一个repository,并返回,我们点进去看一下:

image.png

这个方法获取了一些参数,然后进行了参数的校验,我们继续跟进:

image.png

这里有个注释,我标记了出来,是创建一个代理,那为啥要创建代理呢?可能是要给每个repository添加一些查找方法啊,或者默认方法之类的。

image.png

我们可以看到,其添加了一些拦截器,这里我们就不展开了。

之后是获取一个生成的repository,然后返回,这样就完成了注解的全流程image.png

不是很难,对吗?你学会了嘛?


作者:CocaCoder
链接:https://juejin.cn/post/7064072761399836703

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐