SpringDataJPA执行原理解析

我们都知道 在SpringDataJpa中我们定义DAO层是不需要实现类的,只需要定义一个接口,并继承2个接口即可(JpaRepository,JpaSpecificationExecutor),即可直接操作持久层数据,这种情况,就是以动态代理的方式,进行api的实现,进行相应的操作;

执行一个查询操作 Debug
在单元测试环境中不加事务会报错(不加Rollback ,会自动回滚,相信大家都明白)
SpringDataJPA执行原理解析_第1张图片

查看家族谱
可以看到 是有一个SimpleJpaRepository具体的实现类的, 以下四个是我定义的DAO接口 ,点实现类进去查看

SpringDataJPA执行原理解析_第2张图片

看到是实现类的方法以及具体实现(就会有点焕然大悟的感觉(封装,封装,在封装))

SpringDataJPA执行原理解析_第3张图片

在看看我们的查找方法 是哪个实现的
SpringDataJPA执行原理解析_第4张图片
Debug看到了我们定义的UserDao的实现类型
在这里插入图片描述

我们可以看到 调用接口方法 debug进到了一个 JdkDyNamicAopProxy的类中这个类继承了Jdk提供的动态代理方式
并实现了invoke这个方法,对指定的对象进行动态代理的方式从而实现接口中的方法,才可以供我们调用.
在这里插入图片描述

SpringDataJPA执行原理解析_第5张图片

你可能感兴趣的:(spring,jpa,hibernate)