springDataJpa的运行过程和原理剖析

springDataJpa的运行过程和原理剖析

1 执行过程分析
1.分析如图所示:在这里插入图片描述
1.通过JdkDynamicAopProxy的invoke方法创建了一个动态代理对象
2.SimpleJpaRepository当中封装了JPA的操作(借助JPA的api完成数据库的CRUD)
3.通过hibernate完成数据库操作(封装了jdbc)
以测试findOne()方法为例,在findOne()方法之前打断点,并使用debug运行如图所示:在这里插入图片描述
如图所示,说明customerDao是一个动态代理类对象。在这里插入图片描述
2 源码分析步骤如下:
a.如图所示,是Spring AOP的一种实现方式。在这里插入图片描述
Spring AOP内部就是通过动态代理来帮助创建代理对象的。所以创建的对象就是借助JdkDynamicAopProxy进行创建的。
通过Jump To Type Source来查看源码如图所示:在这里插入图片描述
进入如图所示界面,JdkDynamicAopProxy实现了InvocationHandler。在这里插入图片描述
InvocationHandler就是动态代理的一个参数。找到如图所示invoke()方法。在这里插入图片描述
当我们去执行invoke()方法的时候,就会帮助我们去创建客户的Dao对象接口的实现类。Object target = null;target就是生产的代理对象。
如图所示,对target进行赋值。在这里插入图片描述
target就是 SimpleJpaRepository对象,在debug控制台使用Jump To Type Source来查看源码如图所示:在这里插入图片描述
进入SimpleJpaRepository如图所示:在这里插入图片描述
SimpleJpaRepository实现了JpaRepository,JpaSpecificationExecutor的接口。SimpleJpaRepository也就是CustomerDao实现类。
在自定义的CustomerDao中,并没有提供任何方法就可以使用其中的很多方法,那么这些方法究竟是怎么来的呢?答案很简单,对于我们自定义的Dao接口,由于继承了JpaRepository和JpaSpecificationExecutor,所以我们可以使用这两个接口的所有方法。
找到findOne()方法源码如图所示:在这里插入图片描述
em就是EntityManager是JPA的实体类管理器。通过find()方法的执行过程。
动态分析如图所示:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学无止路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值