spring讲解
今日先简单介绍一下Spring bean 的 5 种效果域,然后详细介绍 singleton 和 prototype 这两种最常用的效果域。
JavaSpring Bean的五种效果域
效果域的种类
Spring 容器在初始化一个 Bean 的实例时,一起会指定该实例的效果域。Spring3 为 Bean 界说了五种效果域,具体如下。
1)singleton
单例形式,运用 singleton 界说的 Bean 在 Spring 容器中只需一个实例,这也是 Bean 默许的效果域。
2)prototype
原型形式,每次经过 Spring 容器获取 prototype 界说的 Bean 时,容器都将创立一个新的 Bean 实例。
3)request
在一次 HTTP 恳求中,容器会回来该 Bean 的同一个实例。而对不同的 HTTP 恳求,会回来不同的实例,该效果域仅在当前 HTTP Request 内有用。
4)session
在一次 HTTP Session 中,容器会回来该 Bean 的同一个实例。而对不同的 HTTP 恳求,会回来不同的实例,该效果域仅在当前 HTTP Session 内有用。
5)global Session
在一个大局的 HTTP Session 中,容器会回来该 Bean 的同一个实例。该效果域仅在运用 portlet context 时有用。
在上述五种效果域中,singleton 和 prototype 是最常用的两种,接下来将对这两种效果域进行详细讲解。
singleton 效果域
singleton 是 Spring 容器默许的效果域,当一个 Bean 的效果域为 singleton 时,Spring 容器中只会存在一个同享的 Bean 实例,并且一切对 Bean 的恳求,只需 id 与该 Bean 界说相匹配,就只会回来 Bean 的同一个实例。
通常情况下,这种单例形式关于无会话状态的 Bean(如 DAO 层、Service 层)来说,是最理想的选择。
在 Spring 配置文件中,能够运用元素的 scope 属性,将 Bean 的效果域界说成 singleton,其配置办法如下所示:
在项目的 src 目录下创立一个名为 com.mengma.scope 的包,在该包下创立 Person 类,类中不需求添加任何成员,然后创立 Spring 的配置文件 applicationContext.xml,将上述 Bean 的界说办法写入配置文件中,最后创立一个名为 PersonTest 的测试类,修改后如下所示。
package com.mengma.scope;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class PersonTest {
@Test
public void test() {
// 界说Spring配置文件途径
String xmlPath = "com/mengma/scope/applicationContext.xml";
// 初始化Spring容器,加载配置文件,并对bean进行实例化
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
xmlPath);
// 输出取得实例
System.out.println(applicationContext.getBean("person"));
System.out.println(applicationContext.getBean("person"));
}
}
运用 JUnit 测试运转 test() 办法,运转成功后,控制台的输出成果如图 1 所示。
JavaSpring Bean的五种效果域
从图 1 中能够看到,两次输出的成果相同,这说明 Spring 容器只创立了一个 Person 类的实例。因为 Spring 容器默许效果域是 singleton,如果不设置 scope="singleton",则其输出成果也将是一个实例。
prototype 效果域
运用 prototype 效果域的 Bean 会在每次恳求该 Bean 时都会创立一个新的 Bean 实例。因而对需求坚持会话状态的 Bean(如 Struts2 的 Action 类)应该运用 prototype 效果域。
在 Spring 配置文件中,要将 Bean 界说为 prototype 效果域,只需将元素的 scope 属性值界说成 prototype,其示例代码如下所示:
将《singleton效果域》部分中的配置文件更改成上述代码形式后,再次运转 test() 办法,控制台的输出成果如图 2 所示。
JavaSpring Bean的五种效果域
spring讲解的更多相关文章
- Spring 讲解(一 )
1.如何理解 Spring 框架 简单来说,Spring 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. 因为以前写代码的时候,在使用类对象的时候,经常需要实例化创建(new 出来) ...
- Spring讲解-----------表达式语言
转自:https://blog.csdn.net/u011225629/article/details/47143083 5.1 概述5.1.1 概述 Spring表达式语言全称为“S ...
- Spring 讲解(六)
如何理解 Spring 中的 AOP 一.AOP 的概述 AOP(Aspect Oriented Programming):面向切面编程,通过预编译方式和运行期动态代理来实现程序功能的统一维护的一种技 ...
- Spring 讲解(五)
Spring 中使用 xml 配置开发和使用注解开发案例 1.Spring 中使用 xml 配置开发案例 接口 public interface UserDao { void add(User use ...
- Spring 讲解(四)
Spring 中使用注解注入 注解:就是一个类,使用 @ 注解名称. 实际开发中:使用注解取代 xml 配置文件. 1.常用注解释义 @component 取代 <bean class=&quo ...
- Spring 讲解(二 )
1.Spring 容器加载的3种方式 public class ServiceTest { public static void main(String[] args) { //Spring容器加载有 ...
- Spring讲解(三)
依赖注入Bean属性,使用xml配置 1.构造方法注入 案例代码演示 public class User { private String username; private String passw ...
- ARTS第一周
开始进行的第一周. 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有观点和思 ...
- 【Spring】SpringMVC入门示例讲解
目录结构: // contents structure [-] SpringMVC是什么 Spring MVC的设计原理 SpringMVC入门示例 1,复制Jar包 2,Web.xml文件 3,My ...
随机推荐
- C语言第2
今个那老哥替我刷题,然后遇到一个打印中文编码得问题,我多嘴一问,为啥 用 unsiged 然后他让我换成char试试:然后出现了以下结果 #include <stdio.h> #inclu ...
- TreeMap 原理
基于jdk1.8 TreeMap第一个想到的就是有序,当然也不是线程安全 TreeMap实现NavigableMap接口,说明支持一系列的导航方法 一.构造方法 public TreeMap() { ...
- SuperSocket 2.0 发布第一个预览版, 另寻找Yang Fan哥哥
昨天,SuperSocket的作者发布了2.0版本的第一个预览版.SuperSocket 2.0 是一个经过全新设计的,第一个完全基于.NET Core的版本.作者正在积极尝试提供更简单易用的API的 ...
- mysql百万级数据分页查询缓慢优化-实战
作为后端攻城狮,在接到分页list需求的时候,内心是这样的 画面是这样的 代码大概是这样的 select count(id) from … 查出总数 select * from …. li ...
- snappy 安装
1 下载snappywget https://kojipkgs.fedoraproject.org//vol/fedora_koji_archive00/packages/snappy/1.1.0/1 ...
- Mysql 常用数据类型 占用字节数 [转]
数据类型是定义列中可以存储什么数据以及该数据实际怎么存储的基本规则.Mysql的常用数据类型主要有: 串数据类型:最常用的数据类型,有两种基本的串类型:分别为定长串和不定长串.定长串结束长度固定的字符 ...
- Java & PHP RSA 互通密钥、签名、验签、加密、解密
RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Le ...
- 小记 .NET Core 3.0 下 WPF 是如何运行的
1. 解决方案架构 如图: 2. 生成的代码 如图: /// <summary> /// App /// </summary> public partial class App ...
- 【UOJ#75】【UR #6】智商锁(矩阵树定理,随机)
[UOJ#75][UR #6]智商锁(矩阵树定理,随机) 题面 UOJ 题解 这种题我哪里做得来啊[惊恐],,, 题解做法:随机\(1000\)个点数为\(12\)的无向图,矩阵树定理算出它的生成树个 ...
- 排序算法Java代码实现(二)—— 冒泡排序
本篇内容: 冒泡排序 冒泡排序 算法思想: 冒泡排序的原理是:从左到右,相邻元素进行比较. 每次比较一轮,就会找到序列中最大的一个或最小的一个.这个数就会从序列的最右边冒出来. 代码实现: /** * ...