SpringBoot的EnableJpaRepositories原理解析
今天我们来深入学习下jpa,凡事多问个为什么?你为什么眼睛常含泪水,因为我对这片土地爱的深沉。
所以,今天我们来爱一个jpa,为什么你自己定义个Repository,就能使用crud方法,那肯定是因为别的类抗下了所有。
Repository Bean创建分析
我們在使用的時候在类上标记了这样一个注解@EnableJpaRepositories ,我们来点进去看看这个类。
这里有一个JpaRepositoryFactoryBean,FactoryBean和BeanFactory有啥区别?哈哈,我理解FactoryBean创建的是工厂的Bean对象,BeanFactory创建的是普通Bean对象。
然后我们点进去,看到一个do方法,
然后会给我们创建一个RepositoryFactorySupport
那问题来了,这个方法什么时候调用呢,我们可以看到这个方法afterPropertiesSet() :
这个方法就是当Bean对象初始化的时候,调用的,用来设置一些参数值,我们来看看里面干了什么:
只是进行了一个判空,然后调用父类的方法,ok,我们接着跟一下:
这里创建了一个对象,就是调用我们之前提到的方法。这里面还给非常多的参数赋值,赋值之后呢,我们看到了这样的获取方法:
这个方法就是获取一个repository,并返回,我们点进去看一下:
这个方法获取了一些参数,然后进行了参数的校验,我们继续跟进:
这里有个注释,我标记了出来,是创建一个代理,那为啥要创建代理呢?可能是要给每个repository添加一些查找方法啊,或者默认方法之类的。
我们可以看到,其添加了一些拦截器,这里我们就不展开了。
之后是获取一个生成的repository,然后返回,这样就完成了注解的全流程
不是很难,对吗?你学会了嘛?
作者:CocaCoder
链接:https://juejin.cn/post/7064072761399836703