【学习笔记】Bean的作用域

Bean的作用域

官方给出了六个作用域

image-20230213153653380

其中后面四个request、session、application、websocket是在web开发中使用到的,这里不做过多介绍

主要了解的是singleton、prototype

Singleton Scope(单例作用域)

image-20230213153925467

当你定义一个bean,并把它的作用域设为单例,ioc容器只创建该bean所定义的对象的一个实例

它是spring默认的的作用域,也可以显示的定义出来,如下

<bean id="accountService" class="com.something.DefaultAccountService" scope="singleton"/>

下面我们使用一个例子来验证一下,看看同一个bean实例化的对象是不是一个对象

<bean id="user2" class="com.wang.pojo.User" c:name="李四" c:age="20"/>

我们来使用 “==” ,来判断这个bean实例化两次的结果是不是一个对象

public void test02(){
    ApplicationContext context = new ClassPathXmlApplicationContext("userBeans.xml");
    User user = (User) context.getBean("user2");
    User user2 = (User) context.getBean("user2");
    System.out.println("是否相等" + (user==user2));
}

image-20230213155248835

结果告诉我们,单例模式下,只会实例化一个对象。

 

Prototype Scope(原型作用域)

image-20230213155518275

与单例作用域相反,如果一个bean的作用域是原型作用域,那么每一次实例化它,都会产生一个新的对象

使用原型作用域需要手动定义

<bean id="accountService" class="com.something.DefaultAccountService" scope="prototype"/>

例子:

<bean id="user2" class="com.wang.pojo.User" c:name="李四" c:age="20" scope="prototype"/>

image-20230213155757025

posted @ 2023-02-13 15:59  GrowthRoad  阅读(17)  评论(0编辑  收藏  举报