IOC后续

1.单例和多例

  1. 单例:
    初始化spring容器后对象直接创建存入Map中,无论调用多少次的getbean(key)方法。其实都是在Map中查询到key值,返回已经创建保存好的对象。直到spring容器退出时销毁对象。
  2. 多例:
    初始化容器后不创建对象,当调用了getbean(key)后,根据key确定要创建的对象,直接创建返回,不存入Map中。
  3. 实现代码:
//scope属性用来控制是否单例或多例,prototype是多例,singleton则表示单例
<bean id="cart" class="cn.tedu.beans.Cart" scope="prototype"></bean>

2.懒加载机制

1.问题的提出:

  • 之前提到的对象创建是在初始化容器的时候,通过解析xml配置文件通过反射直接创建对象并存入map中,这样做有一个坏处,就是当bean过多的时候会花费大量时间和空间来处理bean。

2.问题的解决:

  • 为了解决上述问题,spring提出了懒加载机制,简单来说,当初始化spring容器的时候,不直接创建对象,而是把创建对象延迟到调用getbean()的时候。(注意:懒加载机制只对单例有用,多例的话不存在这个问题,因为多例本身就是调用getbean()的时候才会创建对象。
    3.代码的实现:

  • 实现1:为指定的bean配置懒加载,lazy-init=“true”
    java <bean id="cart" class="cn.tedu.beans.Cart" lazy-init="true"></bean>

  • 实现2:为全局配置,配置文件里的bean全部默认懒加载,default-lazy-init=“true”

3.初始化和销毁的方法

  • 当spring容器初始化和使用close方法的时候,可以调用一些事先在类里写好的初始化方法和销毁方法。
    比如在一个工具类里,有一个获取数据库连接的初始化方(initConnection)需要在创建对象的时候初始化,使用完成后需要释放连接(closeConnection)

实现代码:

//init-method中配置初始化方法,destroy-method中配置销毁方法
<bean id="prodDao" class="cn.tedu.beans.ProdDao" 
init-method="initConnection" destroy-method="closeConnection"></bean>

猜你喜欢

转载自blog.csdn.net/weixin_42596778/article/details/105810623
ioc