bean的加载(六)准备创建bean

Spring源码中,我们不可能指望在一个函数中完成一个复杂的逻辑,而且我们跟踪了那么多Spring代码,经历了那么多函数,或多或少也发现了一些规律:一个真正干活的函数其实是以do开头的,比如doGetObjectFromFactoryBean;而给我们错觉的函数,比如getObjectFromFactoryBean,其实只是从全局角度去做一些统筹的工作。而这个规则对于createBean也不例外,那么让我们看看createBean函数中做了哪些准备工作。

在上述代码中有一个方法:mbd.prepareMethodOverrides();

其实在Spring中确实没有override-method这样的配置,但是我们前面说过,在Spring配置中是存在lookup-method和replace-method的,而这个两个配置的加载其实就是将配置统一存放在BeanDefinition中的methodOverrides属性里,而这个函数的操作其实也就是针对于这两个配置的。我们先看看Override属性标记及验证的逻辑实现。

之前反复提起过,在Sprin配置中存在lookup-method和replace-method两个配置功能,而这两个配置的加载其实就是将配置统一放在BeanDefinition中的methodOverrides属性里,这两个功能实现原理其实是在bean实例化的时候如果检测到存在methodOverrides属性,会动态地位当前bean生成代理并使用对应的拦截器为bean做增强处理,相关的逻辑实现在bean的实例化部分详细介绍。

这里要提到的是,对于方法的匹配来讲,如果一个类中存在若干个重载方法,那么在函数调用及增强的时候还需要 根据参数类型进行匹配,来最终确认当前调用的到底是哪个函数。但是Spring将一部分匹配工作在这里完成了,如果当前类中的方法只有一个,俺么就设置重载该方法没有被重载,这样在后续调用的时候便可以直接使用找到的方法,而不需要进行方法的参数匹配验证了,而且还可以提前对方法存在性进行验证,正可谓一举两得

实例化的前置处理:

在此方法中最吸引我们的方法有两个,在上面用红色圈出。这两个方法的实现其实非常简单,无非是对后处理器中的所有InstantiationAwareBeanPostProcessor类型的后处理器进行postProcessBeforeInstantiation方法和BeanPostProcessor的postProcessAfterInitialization进行调用。

关于这两个方法的详细功能,我们会在后续的文章中介绍,在此只需要知道,它们一个是实例化前的后处理器应用,一个是实例化后的后处理器应用就可以了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值