码迷,mamicode.com
首页 > 编程语言 > 详细

spring讲解

时间:2019-11-13 22:10:50      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:person   不同   加载   path   讲解   项目   pat   不同的   ice   

今日先简单介绍一下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讲解

标签:person   不同   加载   path   讲解   项目   pat   不同的   ice   

原文地址:https://www.cnblogs.com/monkey7788/p/11853446.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!