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
同学你好~
问题一:
Spring工厂在创建对象时默认会使用无参构造方法,然后使用set方法对属性进行赋值而非使用有参构造。这也是为什么在使用Spring时要求对象满足JavaBean的要求,因为JavaBean要求对象必须最少具有无参构造和set/get方法。
问题二:
任何情况下,所有的生命周期步骤都会被执行,无关乎是否显式声明了init和destroy相关方法。
这里会涉及较多的Spring工厂对象校验、初始化、销毁相关的知识,需要大量阅读源码,现阶段不建议同学过多的深究。
问题三:
当没有显式声明init方法时,Spring工厂会使用默认的策略初始化对象。当没有显式声明destroy方法时,对象销毁策略为随着Spring工厂的销毁而销毁。
这里课程中只是简单的介绍了Bean的生命周期,有很多的细节没有细致交代,如果同学对这方面知识感兴趣,建议单独查阅资料进行学习。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星