Spring 入门三 延迟初始化(懒加载)跟bean的作用域

Spring延迟初始化。懒加载

在Spring的配置文件当中配置文件是默认加载Bean类的无参构造方法的,如果要配置不加载Bean类的无参构造方法的时候我们需要在< beans>中设定他的懒加载为ture。
将这个一段命令加入到beans的配置当中:default-lazy-init="true"


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       default-lazy-init="true"
       < /beans>

bean的作用域

详细的信息可以参考这个网页:我不是一下网页的原文编撰者
https://baijiahao.baidu.com/s?id=1610298792072480906&wfr=spider&for=pc

另外这里将基础理论写在下面,基本是粘贴复制的:
● 应用scope配置项配置Bean的作用域

● 应用单例模式singleton

● 应用原型模式prototype

1、作用域scope配置项

作用域限定了Spring Bean的作用范围,在Spring配置文件定义Bean时,通过声明scope配置项,可以灵活定义Bean的作用范围。例如,当你希望每次IOC容器返回的Bean是同一个实例时,可以设置scope为singleton;当你希望每次IOC容器返回的Bean实例是一个新的实例时,可以设置scope为prototype。

scope配置项有5个属性,用于描述不同的作用域。

① singleton

使用该属性定义Bean时,IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例。

② prototype

使用该属性定义Bean时,IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。

③ request

该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境。

④ session

该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。

⑤ global-session

该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。

下面重点讨论singleton、prototyp作用域,request、session和global-session类作用域放到Spring MVC章节讨论,这里不再做详细讲述。

2、singleton作用域

singleton是默认的作用域,当定义Bean时,如果没有指定scope配置项,Bean的作用域被默认为singleton。singleton属于单例模式,在整个系统上下文环境中,仅有一个Bean实例。也就是说,在整个系统上下文环境中,你通过Spring IOC获取的都是同一个实例。

配置Bean为singleton作用域的配置代码如下。

在这里插入图片描述

singleton作用域示例:

(1)课程案例新建SingletonTest类文件,添加下面的代码。

在这里插入图片描述

(2)修改IocPrincipal类文件,添加输出EmailNotice和PhoneNotice实例的hashCode,用于判断程序两次从IOC容器中获取的实例是否为同一实例。

在这里插入图片描述
(3)执行SingletonTest类文件,输出结果如下图所示。

在这里插入图片描述

图1 执行SingletonTest类输出结果
从输出结果可以看出,程序两次从IOC容器中获取的EmailNotice和PhoneNotice实例的hashCode是相同的,说明IOC容器返回的是同一个实例。

3、prototype作用域

当一个Bean的作用域被定义prototype时,意味着程序每次从IOC容器获取的Bean都是一个新的实例。因此,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。

配置Bean为singleton作用域的配置代码如下。
在这里插入图片描述

prototype作用域示例:

(1)修改dispatcher.xml配置文件,在定义的Bean中添加prototype属性。

在这里插入图片描述
(3)执行SingletonTest类文件,输出结果如下图所示。

在这里插入图片描述

图2 添加prototype后执行SingletonTest
从输出结果可以看出,程序两次从IOC容器中获取的EmailNotice和PhoneNotice实例的hashCode是不相同的,说明EmailNotice和PhoneNotice添加prototype作用域后,IOC容器每次返回的都是一个新的实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值