Spring组件注册之@Scope属性-设置组件作用域

在Spring中,组件作用域一般有如下几种(常用的只有前两种)

singleton  单实例
prototype  多实例
request    同一个请求创建一个实例
session    同一个session创建一个实例	
global-session  同session作用域不同的是,所有的Session共享一个Bean实例

下面写个例子测试一下单例和多例模式
配置类

package config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

import spring.Person;

@Configuration
public class MainConfig2 {
	
	//默认是单实例
	/*singleton  单实例
	 *prototype  多实例
	 *request    同一个请求创建一个实例
	 *session    同一个session创建一个实例
	 * */
	@Bean(value="person")
	@Scope(value="singleton")
	public Person person() {
		return new Person("chd", "18");
	}
}

Test测试类

package chd.test;

import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import config.MainConfig2;

public class Test2 {
	@Test
	public void Test() {
		AnnotationConfigApplicationContext   applicationContext  =new AnnotationConfigApplicationContext(MainConfig2.class);
		String []arr=applicationContext.getBeanDefinitionNames();
		for (String name : arr) {
			System.out.println(name);
		}
		Object bean= applicationContext.getBean("person");
		Object bean2= applicationContext.getBean("person");
		System.out.println(bean==bean2);
	}

}

单例模式下@Scope(value=“singleton”),创建两个bean的结果
在这里插入图片描述
多例模式@Scope(value=“prototype”)下结果
(说明创建了两个bean实例)
在这里插入图片描述
那么单例模式和多例模式下,Ioc容器创建其过程是一样的吗?
单例模式

	@Bean(value="person")
	@Scope(value="singleton")
	public Person person() {
	//容器调用此类输出一下语句
		System.out.println("给容器中注册bean类...");
		return new Person("chd", "18");

结果如下,说明容器创建过的过程,调用此方法创建bean对象放入容器之中
在这里插入图片描述
在多例模式之下,则不会先调用此方法,意味着容器没有创建对象到容器之中
在这里插入图片描述
那么在多例模式下,什么时候会创建实例呢?
在测视类中,获取bean对象(每次调用的时候则会创建对应实例)

@Test
	public void Test() {
		AnnotationConfigApplicationContext   applicationContext  =new AnnotationConfigApplicationContext(MainConfig2.class);	
		System.out.println("ioc容器创建完成...");	
		Object bean= applicationContext.getBean("person");
		Object bean2= applicationContext.getBean("person");
	}

在这里插入图片描述

总结一下
单实例:ioc容器启动会调用方法创建对象放到ioc容器中。以后每次获取就是直接从容器中拿。
多实例:ioc容器并不会调用方法创建对象放入容器之中,每次获取的时候才会调用方法创建对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微微笑再加油

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值