SpringData源码剖析

一. resumeDao代理对象是怎么产生的,过程怎样?

以往:如果要给⼀个对象产⽣代理对象,我们知道是在 AbstractApplicationContext refresh ⽅法中,那么能不能在这个⽅法中找到什么我们当前场景的线索?

 

 

新的疑问⼜来了?
问题 1 : 为什么会给它指定为⼀个 JpaRespositoryFactoryBean getObject ⽅法返回具体的对象)
问题 2 :指定这个 FactoryBean 是在什么时候发⽣的?
⾸先解决问题 2

 

传⼊⼀个 resumeDao 就返回了⼀个已经指定 class JpaRepositoryFactoryBean BeanDefifinition 对象了,那么应该在上图中的 get 时候就有了,所以断点进⼊

 问题来了,什么时候putmap中去的?我们定位到了⼀个⽅法在做这件事

 

我们发现,传⼊该⽅法的时候, BeanDefifintion 中的 class 就已经被指定为 FactoryBean 了,那么观察该⽅法的调⽤栈

 

 

 

 

 

通过上述追踪我们发现, <jpa:repository basePackage ,扫描到的接⼝,在进⾏ BeanDefifintion
注册时候, class 会被固定的指定为 JpaRepositoryFacotryBean⾄此,问题 2 追踪完毕
那么接下来,我们再来追踪问题 1 JpaRespositoryFactoryBean 是⼀个什么样的类
它是⼀个 FactoryBean ,我们重点关注 FactoryBean getObject ⽅法

 

 

 

 

 

 

 

由此可⻅, JdkDynamicAopProxy 会⽣成⼀个代理对象类型为 SimpleJpaRespository ,⽽该对象的增强逻辑就在 JdkDynamicAopProxy 类的 invoke ⽅法中
⾄此,问题 1 追踪完毕。

二.这个代理对象类型SimpleJapRepository有什么特别的?

 

 原来SimpleJpaRepository类实现了JpaRepository接⼝和JpaSpecifificationExecutor接⼝

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值