• 第3章Spring Data JPA的内部原理剖析


    Spring Data JPA的常用接口分析

    在客户的案例中,我们发现在自定义的CustomerDao中,并没有提供任何方法就可以使用其中的很多方法,那么这些方法究竟是怎么来的呢?答案很简单,对于我们自定义的Dao接口,由于继承了JpaRepositoryJpaSpecificationExecutor,所以我们可以使用这两个接口的所有方法。

    在使用Spring Data JPA时,一般实现JpaRepositoryJpaSpecificationExecutor接口,这样就可以使用这些接口中定义的方法,但是这些方法都只是一些声明,没有具体的实现方式,那么在 Spring Data JPA中它又是怎么实现的呢?

    2 Spring Data JPA的实现过程

    通过对客户案例,以debug断点调试的方式,通过分析Spring Data JPA的原来来分析程序的执行过程

    我们以findOne方法为例进行分析

     

    代理子类的实现过程

    断点执行到方法上时,我们可以发现注入的customerDao对象,本质上是通过JdkDynamicAopProxy生成的一个代理对象

     代理对象中方法调用的分析

    当程序执行的时候,会通过JdkDynamicAopProxyinvoke方法,对customerDao对象生成动态代理对象。根据对Spring Data JPA介绍而知,要想进行findOne查询方法,最终还是会出现JPA规范的API完成操作,那么这些底层代码存在于何处呢?答案很简单,都隐藏在通过JdkDynamicAopProxy生成的动态代理对象当中,而这个动态代理对象就是SimpleJpaRepository

    通过SimpleJpaRepository的源码分析,定位到了findOne方法,在此方法中,返回em.find()的返回结果,那么em又是什么呢?

    带着问题继续查找em对象,我们发现em就是EntityManager对象,而他是JPA原生的实现方式,所以我们得到结论Spring Data JPA只是对标准JPA操作进行了进一步封装,简化了Dao层代码的开发

    Spring Data JPA完整的调用过程分析

  • 相关阅读:
    3.2.5 复制节点:
    1.创建元素节点:
    有多少漏洞都会重来:从ElasticSearch到MongoDB和Redis
    登陆密码显示与不显示的切换
    计算机网络基础 — Linux 路由器
    作为白手起家的企业家,必经阶段你经历了几个?
    竞争越来越大,创业公司怎么才能走的越来越远?
    城市竞争太大?这有农村创业七大项目,让你远离竞争
    短视频的改革带来的风暴,网红又该何去何从?
    照着官方文档学习react
  • 原文地址:https://www.cnblogs.com/yangzhixue/p/12348822.html
Copyright © 2020-2023  润新知