学习笔记——Spring(3)bean的作用域

bean的作用域

  1. singleton:bean的作用域的默认配置,在spring容器加载时,就创建单例的bean,每次获取对象时都是获取的同一个bean
  2. prototype:spring容器加载时并不会去创建bean,而是在每次获取对象时都创建一个新的bean
  3. request:每次http请求过来时,创建一个新的bean,同一请求中多次获取bean,得到的是相同的bean,不同请求中获取bean时,得到的bean不同。该作用域仅适用于web的Spring WebApplicationContext环境;
  4. session同一个http session会话中共享同一个bean,新的会话将创建新的bean。该作用域仅适用于web的Spring WebApplicationContext环境;
  5. application:限定一个Bean的作用域为ServletContext的生命周期。该作用域仅适用于web的Spring WebApplicationContext环境。

配置方式

配置文件中通过设置scope属性:

<!--当bean作用域为“singleton”时,在加载xml文件时(加载spring容器时),就创建bean对象-->
    <bean id="student1" class="entity.Student" scope="singleton">
        <property name="id" value="100"></property>
        <property name="name" value="jack"></property>
    </bean>
    <!--当bean作用域为“prototype”时,在获取bean时才会去创建bean对象-->
    <bean id="teacheer1" class="entity.Teacher" scope="prototype">
        <property name="t_id" value="101"></property>
        <property name="t_name" value="MrLi"></property>
    </bean>

使用注解@Scope

@Scope("singleton")
@Scope("prototype")

延迟加载

当bean的作用域设置为“singleton”(或者是使用默认值)时,bean对象会在spring容器加载时完成创建,如果bean对象数量较多时,将会消耗较多的时间,这时我们可以通过设置bean的延迟加载使bean在容器初始化时不自动创建,而是在使用到该bean对象时再去创建。

设置方式:

<!--lazy-init="true":开启延迟加载;lazy-init="false":不开启延迟加载;lazy-init="default":使用默认设置:不开启延迟加载;-->
    <bean id="student1" class="entity.Student" scope="singleton" lazy-init="default">
        <property name="id" value="100"></property>
        <property name="name" value="jack"></property>
    </bean>

或使用注解:

@Lazy(value = true)

实际情况中,如果不设置延迟加载则启动时会花费一些时间,但带来两个好处:

  1. 能够在容器加载时,就及时的发现一些潜在的bean实例化相关的配置问题;
  2. 启动时创建的Bean会以缓存的方式保存,在运行时直接获取bean,虽然增加容器启动时间,但是加快了运行的效率。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值