Spring源码解析6>

1>Spring是如何解析@Configuration
先看2个现象
现象1>
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们@Bean吧这2个类给注入到Spring当中,并且调用一下
在这里插入图片描述
看效果 打印一次UserSerce
现象2>
在这里插入图片描述
现在是加了@Configuration的注解,如果去除这个注解 结果有不一样
我也说了 Spring进行了cglib进行代理
写一段伪代码吧
Sprign大致是这个思路
if(first){
new Object();
}else{

Application.get();
}
//------------->如果2次都new了就与Spirng单利违背了单利的原则
我们先看下Spring的cglib代理
在这里插入图片描述
在这里插入图片描述

1.cglib是基于父类的
2>添加一个setInterfaces
3.命名策略
4>回调函数
为什么要加入一个EnhancedConfiguration呢在这里插入图片描述
我们看到了什么 BeanFactoryAware 继承了他
在这里插入图片描述
也就是说我们cglib动态产生的类 比如说xxx
public class xxx entend Appconfig impentent EnhancedConfiguration{
BeanFactory beanFactory
void setBeanFactory(BeanFactory beanFactory) throws BeansException{};
}
我也就写一段伪代码 为啥要有 BeanFactory呢 因为我上面说了如果不是第一次的话 他就得BeanFactory。getBean();
=======================================================>
我们把他这段代码拿过来改改看看Cglib代理
UserService类

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这里解释下methodProxy.invokeSuper(o,objects);//
这个代码是执行父类的方法 也就是说 UserService#query
============================>
好了我也说了我们的伪代码
if(first){
new Object();
}else{

application,getI();
}
自然将上面使我们一般人的想法
Spring怎么做
if(first){
methodProxy.invokeSuper(o,objects);//直接执行父类的方法
}else{
application,getI();

}
// 看Spring 做到的多牛逼

我不是空谈啊 Spring这里有代码 在他的<CALLBACK_FILTER>里面
在这里插入图片描述
我们先看完他的大致逻辑再说细节吧
也就是现在
if (isCurrentlyInvokedFactoryMethod(beanMethod)) {

//调用父类
}else{

// get对象
}
//------------->isCurrentlyInvokedFactoryMethod(beanMethod)
这个方法判断是不是第一次 点进来看看
这里先想下
appconfig----------------->xx代理
userservice1()-------||-userservice1()//xx当中的userService1方法
也就是Spring在执行代理的方法时会判断是不是正在执行的方法
在这里插入图片描述
举个例子啊 如果userService()方法第一次进入的话 他此时正在执行的方法还是他
如果userService第二次进入的话,他此时正在执行的方法就是userService1()
=========================>spring是这样判断的
在这里插入图片描述
然后跳出来将Bd的class属性更改一下
在这里插入图片描述
终于吧这个方法讲完了
=============================>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值