Spring的工作流程

13 篇文章 0 订阅
5 篇文章 0 订阅

经过十多天的学习,我的脑海中开始对spring框架有了基本的认识

        首先我了解了spring框架的几个基本的常见的类:BeanFactory、BeanDefinition、BeanFactoryPostProfessor、BeanPostProcessor、BeanDefinitionReader还有Aware有关接口

        他们的功能区在于spring的各个工作功能期

        首先无论是选择使用注解开发还是使用配置文件开发注册bean,spring都需要一个类去读取这些配置文件信息,那个那个就是BeanDefinitionReader的实现类,他提供了配置文件的读取功能。

        当spring读取完配置文件获取的信息需要有一个对象来存储,这个对象就是BeanDefinition对象,他的任务不是存储bean对象的id与对象键值对,而是存储bean对象的定义信息,比如属性,是否单例,是否懒加载,谁是初始化方法等。

        当拥有了bean的定义信息之后接下来实际上就可以创建对象了,但是有的定义信息是可以加工的。比如我们最常见的需要二次加工定义信息的bean:DataSource对象,我们经常使用外置配置文件去把数据库连接信息放到一个properties文件中,那么在写对象属性的value值时使用的就是${},那么BeanDefinitionReader读取到的信息就是这样原封不动的,这个信息就需要二次加工,那谁来完成这件事呢?也就是BeanFactoryPostProcessor。

        多个BeanFactoryPostProcessor对象将信息进行二次加工后将改装完成的真正信息传给了BeanFactory对象,BeanFactory对象拿到了这些定义信息后就可以创建对象了,创建的方式当然就是反射的方式。既然创建了对象那么下一步就是初始化对象。

        首先需要将属性填充进对象中,使用的是AbstractAutowireCapableBeanFactory的populateBean方法,将属性注入到bean对象中。

        其次,当注入属性时需要通过bean调用spring底层的一些属性时,就需要使用Aware接口来完成捕捉获取

        然后就是BeanPostProcessor了,比如我们在学习aop时,有些类需要使用代理模式来实现,所以在初始化对象时就需要使用以实例化了的对象来完成代理模式,此时的时机恰好。而初始化又分为两块:before和after,这个在学习spring的bean生命周期时学习过,在bean调用init-param方法的前后会依次调用BeanPostProcessor的before和after方法。所以流程是先执行BeanPostProcessor的before处理方法,然后使用自己配置的init-param方法,最后在调用BeanPostProcessor的after处理方法。

        这时,bean的初始化就完成了,在容器中的bean就可以随时拿来使用。

        

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aristocrat l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值