Spring源码解析-Bean生命周期详解

1.调用构造器构造对象:

        默认使用无参构造方法,若声明有参构造方法,则自动注入参数,调用有参构造方法(如果有多个有参构造方法,则会抛出无默认构造方法异常),如果参数在spring容器中无bean对象,即无法注入,则会抛出异常。若有多个有参构造方法,可使用@Autowired注解来标记默认使用的构造方法,同时根据protol注解的value来判断是否为单例,只有为单列时才会调用构造方法构造对象

2.注入属性:

        spring会先扫描切入点(即被autowire等注解标注的属性),然后根据字段类型,扫描容器中所有的bean,找出符合该类型的所有bean,然后根据beanName找到对应的bean返回注入(详细过程后续介绍)

3.指定属性赋值

        spring会判断当前bean对象是否实现了xxAware接口,若实现了该接口,则会进行相应属性的赋值,如BeanNameAware就会对BeanName属性进行赋值,本质是将生成bean对象过程中spring所生成出来的一系列对象返回给调用者

4.初始化前:

        在初始化bean之前会先扫描该类中是否存在被@PostConstuct等注解标注的方法,如果有,则执行该方法,同时也会扫描是否有实现BeanPostProcessor接口的类,并将扫描到的类放入数组中,然后遍历每个对象,同时将生成好的bean遍历传入该对象的beforeinital方法中,执行初始化前置方法。

5.初始化:

       初始化时会判断该类是否实现inialnaziBean接口,如果实现了该接口,则执行实现的方法(afterPropertiesSet())。当然spring在配置文件中也提供了init-method标签,用来指定初始化方法,也是在该步骤进行调用

6.初始化后:   

        遍历BeanPostProcessor接口实现对象,执行其afterinitialnize方法,用户可进行自定义,同时这也是spring实现aop的重要方式,一般会在此方法中,生成一个代理对象(jdk原生动态代理),故可以得知,最终放入容器中的为代理对象

7.初始化完成:

        将初始化完成后的bean对象放入容器中等待调用

7.销毁

       当spring容器被销毁时,容器中的bean也会被销毁,默认调用对象的destroy方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值