bean声明周期问题

bean声明周期问题

对象行为中对象实例化执行构造方法

然后容器行为中为对象注入属性

问题1:当通过配置文件通过反射实例化bean时,我调用有参构造方法实例化对象,为啥底层还要通过反射机制运行调用setXXX方法设置属性,如果我用有参构造方法实例化对象并注入属性值时,是不是在

bean声明周期中容器行为里对象注入属性就可以少这一步了?


问题2:在bean 配置文件中不写init-method 初始化和destroy-method方法时

--条件一,在配置文件中<bean id="order1" class="com.imooc.spring.ioc.entity.Order"/>

bean生命周期就如下

容器行为    对象行为

1.IOC容器准备初始化解析XML 2.对象实例化执行默认无惨构造方法

3.IOC容器初始化完毕 3.执行业务代码



条件二,在配置文件中    <bean id="order1" class="com.imooc.spring.ioc.entity.Order"/>

        <constructor-arg name="price" value="19.8"/>

        <constructor-arg name="quantity" value="1000"/>

    </bean>


bean生命周期就如下

容器行为    对象行为

1.IOC容器准备初始化解析XML 2.对象实例化执行有参构造方法

3.IOC容器初始化完毕 3.执行业务代码



条件二,在配置文件中    <bean id="order1" class="com.imooc.spring.ioc.entity.Order"/>

        <property name="price" value="19.8"/>

        <property name="quantity" value="1000"/>

    </bean>


bean生命周期就如下

容器行为    对象行为

1.IOC容器准备初始化解析XML 2.对象实例化执行无惨构造方法

3.调用set 方法注入属性 4.因为配置文件中没有写init-method 方法所以系统不会init-method

3.IOC容器初始化完毕 3.执行业务代码



问题3:在bean 配置文件中不写init-method 初始化和destroy-method方法时

是不是对象行为声明周期就不会经过调用init_method 和调用destory-method 释放资源这一步


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2022-06-18 13:53:00

同学你好~

问题一:

Spring工厂在创建对象时默认会使用无参构造方法,然后使用set方法对属性进行赋值而非使用有参构造。这也是为什么在使用Spring时要求对象满足JavaBean的要求,因为JavaBean要求对象必须最少具有无参构造和set/get方法。

问题二:

任何情况下,所有的生命周期步骤都会被执行,无关乎是否显式声明了init和destroy相关方法。

这里会涉及较多的Spring工厂对象校验、初始化、销毁相关的知识,需要大量阅读源码,现阶段不建议同学过多的深究。

问题三:

当没有显式声明init方法时,Spring工厂会使用默认的策略初始化对象。当没有显式声明destroy方法时,对象销毁策略为随着Spring工厂的销毁而销毁。

这里课程中只是简单的介绍了Bean的生命周期,有很多的细节没有细致交代,如果同学对这方面知识感兴趣,建议单独查阅资料进行学习。

祝学习愉快~


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师