我们都知道 在SpringDataJpa中我们定义DAO层是不需要实现类的,只需要定义一个接口,并继承2个接口即可(JpaRepository,JpaSpecificationExecutor),即可直接操作持久层数据,这种情况,就是以动态代理的方式,进行api的实现,进行相应的操作;
执行一个查询操作 Debug
在单元测试环境中不加事务会报错(不加Rollback ,会自动回滚,相信大家都明白)
查看家族谱
可以看到 是有一个SimpleJpaRepository具体的实现类的, 以下四个是我定义的DAO接口 ,点实现类进去查看
看到是实现类的方法以及具体实现(就会有点焕然大悟的感觉(封装,封装,在封装))
在看看我们的查找方法 是哪个实现的
Debug看到了我们定义的UserDao的实现类型
我们可以看到 调用接口方法 debug进到了一个 JdkDyNamicAopProxy的类中这个类继承了Jdk提供的动态代理方式
并实现了invoke这个方法,对指定的对象进行动态代理的方式从而实现接口中的方法,才可以供我们调用.