Spring注解驱动开发第5和6讲——使用@Scope注解设置组件的作用域及设置单例模式使用注解@Lazy设置为懒加载

写在前面

  Spring容器中的组件默认是单例的,在Spring启动时就会实例化并初始化这些对象,并将其放到Spring容器中,之后,每次获取对象时,直接从Spring容器中获取,而不再创建对象。如果每次从Spring容器中获取对象时,都要创建一个新的实例对象,那么该如何处理呢?此时就需要使用【@Scope】注解来设置组件的作用域了。

1、@Scope注解概述

@Scope注解能够设置组件的作用域,我们先来看看@Scope注解类的源码,如下所示。

在这里插入图片描述
从@Scope注解类的源码中可以看出,在@Scope注解中可以设置如下值:

  1. ConfigurableBeanFactory#SCOPE_PROTOTYPE
  2. ConfigurableBeanFactory#SCOPE_SINGLETON
  3. org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST
  4. org.springframework.web.context.WebApplicationContext#SCOPE_SESSION

很显然,在@Scope注解中可以设置的值包括
【ConfigurableBeanFactory】接口中的【SCOPE_PROTOTYPE】和【SCOPE_SINGLETON】;
以及【WebApplicationContext】类中的【SCOPE_REQUEST】和【SCOPE_SESSION】。
是不是很头疼?别急,先来看看【ConfigurableBeanFactory】中写了啥。

1、在ConfigurableBeanFactory接口中有这两个值的常量。

String SCOPE_SINGLETON = “singleton”; --单例模式(默认值):全局有且仅有一个实例

String SCOPE_PROTOTYPE = “prototype”; --多例模式,每次获取Bean的时候都会生成新的实例
在这里插入图片描述
2、那【WebApplicationContext】类中这两个值是什么呢?

SCOPE_REQUEST:所对应的值就是 request
SCOPE_SESSION:所对应的值就是 session

【request】 和【session】作用域是需要Web环境来支持的,这两个值基本上使用不到。那这两个值的意义是什么呢?这里记录一下
  request:表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
  session:作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效

2、@Scope注解的使用

2.1单实例bean作用域

写法1(这种写法不理想)

a、新建一个配置类,然后实例化一个Person对象,并将其注入在Spring容器中,如下所示。
在这里插入图片描述
输出结果如下:
在这里插入图片描述
完整代码
MainConfig2.java

package com.leo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值