学科分类
目录
SSM框架

singleton作用域

singleton是Spring容器默认的作用域,当Bean的作用域为singleton时,Spring容器就只会存在一个共享的Bean实例,并且所有对Bean的请求,只要id与该Bean的id属性相匹配,就会返回同一个Bean实例。singleton作用域对于无会话状态的Bean(如Dao 组件、Service组件)来说,是最理想的选择。

在Spring配置文件中,Bean的作用域是通过<bean>元素的scope属性来指定的,该属性值可以设置为singleton、prototype、request、session、globalSession、application和websocket七个值,分别表示表2-2中的7个作用域。要将作用域定义成singleton,只需将scope的属性值设置为singleton即可。其示例代码如下:

<bean id="scope" class="com.itheima.scope.Scope" scope="singleton"/>

在项目chapter02中,创建一个com.itheima.scope包,在包中创建Scope类,该类不需要写任何方法。然后在该包中创建一个配置文件beans4.xml,将上述示例代码写入配置文件中。最后在包中创建测试类ScopeTest,来测试singleton作用域,编辑后如文件1所示。

文件1 ScopeTest.java

 1    package com.itheima.scope;
 2    import org.springframework.context.ApplicationContext;
 3    import 
 4        org.springframework.context.support.ClassPathXmlApplicationContext;
 5    public class ScopeTest {
 6        public static void main(String[] args) {
 7            // 定义配置文件路径
 8            String xmlPath = "com/itheima/scope/beans4.xml";
 9            // 加载配置文件
 10            ApplicationContext applicationContext = 
 11                        new ClassPathXmlApplicationContext(xmlPath);
 12            // 输出获得实例
 13            System.out.println(applicationContext.getBean("scope"));
 14            System.out.println(applicationContext.getBean("scope"));
 15        }
 16    }

执行程序后,控制台的输出结果如图1所示。

图1 运行结果

从图1可以看出,两次输出的结果相同,这说明Spring容器只创建了一个Scope类的实例。

需要注意的是,如果不设置scope="singleton",其输出结果也是一个实例,因为Spring容器默认的作用域就是singleton。

点击此处
隐藏目录