SpringData JPA的实现过程
Debug分析源码
-
代理子类的实现过程:
断点执行到方法上时,我们可以发现注入的customerDao
对象,本质上是通过JdkDynamicAopProxy
生成的一个代理对象。 -
代理对象中方法调用的分析
当程序执行的时候,会通过JdkDynamicAopProxy
的invoke
方法,对customerDao
对象生成动态代理对象。根据对Spring Data JPA介绍而知,要想进行findOne查询方法,最终还是会出现JPA规范的API完成操作,而这些方法都是通过JdkDynamicAopProxy
生成的动态队里对象SimpleJpaRepository
实现的
通过SimpleJpaRepository
的源码分析,定位到了findOne
方法,在此方法中,返回em.find()
的返回结果,这个em
就是EntityManager
对象。EntityManager
对象是JPA
的原生的实现方法,因此,可以得出结论:SpringData JPA
是对标准JPA
操作的进一步封装。
流程总结
简而言之,就是: