spring中创建的对象的作用域

时间:2024-03-07 08:30:10

1.spring中创建对象的三种方式

  1. 使用无参数构造器创建
  2. 使用静态工厂方法创建
  3. 使用实例化对象工厂方法创建
<!-- 使用无参数构造器 -->
<bean id="person" class="com.boe.Person"></bean>
<!-- 使用静态工厂方法 -->
<bean id="cal" class="java.util.Calendar" factory-method="getInstance">
 <!-- 使用实例化对象工厂方法 -->
<bean id="date" factory-bean="cal" factory-method="getTime"></bean>

2.作用域

作用域有singleton和prototype,默认为前者,设置延迟加载只对singleton有效。

  1. 当scope为singleton时
    可以看出作用域为singleton时,对象只创建了一次,并且两者相等,虽然使用getBean方法两次,但是却只有一个对象,似乎对象不是getBean方法获得,这跟后面要说的延迟加载有关。
  2. 当scope为prototype时
    当作用域为prototype时,创建了两个对象,并且两者不相等,说明使用一个getBean方法,就创建了一个新的对象。
    延迟加载:默认情况下容器启动之后,会将作用域为singleton的bean创建好,设置延迟加载容器启动之后,对作用域为singleton的bean不再创建,直到调用getBean方法才会创建,设置延迟加载需在配置文件中设置lazy-init属性。
(1)scope="singleton",lazy-init="false":启动容器就创建对象,并且只有一个
(2)scope="singleton",lazy-init="true":启动容器不会创建对象,直到调用getBean方法才会创建对象,并且只有一个
(3)scope="prototype",无论是否设置延迟加载,均只有在调用getBean方法才会创建对象,并且是创建多个不同的对象

相关文章