为了账号安全,请及时绑定邮箱和手机立即绑定

spring data jpa查询的实体类是在什么地方实现的?

/ 猿问

spring data jpa查询的实体类是在什么地方实现的?

慕容708150 2019-03-15 17:54:27

很好奇,我在项目中只定义了一个,继承了CrudRepository接口或者JpaRepository接口,的接口,他的实体类,是在什么时候生成并且注册到Spring的IOC容器的呢?

public interface TestRepository extends JpaRepository<TestEntity, String> {}

上面这个接口,为什么我在代码中,直接通过@Autowire,就可以从IOC容器中获得这个接口的实体类,来进行CURD操作的呢?

请各位大佬不吝赐教。。


查看完整描述

2 回答

?
慕后森

接口TestRepository的实现类是 org.springframework.aop.framework.ProxyFactory 动态生成的,编译的代码里并没有实现类, 而是真正调用接口时通过 AOP 切面的方式动态在内存里生成的。

查看完整回答
反对 回复 2019-03-15
?
紫衣仙女

如果你在接口调用处设调试断点,你会跟踪到 JdkDynamicAopProxy 类的调用方法里:

public Object invoke(Object proxy, Method method, Object[] args) t

这个方法的参数method就是你的接口方法,这个方法里会通过this.advised.getInterceptorsAndDynamicInterceptionAdvice(...) 得到切面拦截链,进一步创建 invocation = new ReflectiveMethodInvocation(proxy, target, method, args, targetClass, chain) 对象,用来模拟类的方法实现, retVal = invocation.proceed();,根据拦截器的多少,嵌套调用,每层拦截器可以简章理解为是对不同注解的处理,总的来看,相当于方法调用, retVal 就是动态创建的类方法返回的结果。


查看完整回答
反对 回复 2019-03-15

添加回答

回复

举报

0/150
提交
取消
意见反馈 分销返利 帮助中心 APP下载
官方微信