开发手册 欢迎您!
软件开发者资料库

Spring - Bean Scopes

Spring Bean Scopes - 从简单和简单的步骤学习Java Spring Framework 4.1.6版,从基本概念到高级概念,包括概述,体系结构,环境设置,Hello World示例,控制反转(IoC),依赖注入,bean定义,范围,bean生命周期,后处理器,定义继承,依赖注入,内部bean,注入集合,自动装配,注释,基于Java的配置,事件处理,自定义事件,不同模块,面向方面编程(AOP),数据库访问(JDBC) ,事务管理,Web MVC框架,使用Log4j进行日志记录,Web流,异常处理,EJB集成和发送电子邮件,Spring面试问题,答案,测验和在线模拟测试。

定义< bean>时您可以选择声明该bean的范围.例如,要在每次需要时强制Spring生成一个新的bean实例,您应该将bean的scope属性声明为 prototype .类似地,如果你希望每次需要Spring时返回相同的bean实例,你应该将bean的scope属性声明为 singleton .

Spring Framework支持以下五个范围,其中三个范围仅在您使用支持Web的ApplicationContext时可用.

Sr.No.范围&描述
1

singleton

这将bean定义范围扩展到每个Spring IoC容器的单个实例(默认).

2

原型

这可以使单个bean定义包含任意数量的对象实例.

3

请求

这将bean定义范围限定为HTTP请求.仅在Web感知Spring ApplicationContext的上下文中有效.

4

会话


这将bean定义范围限定为HTTP会话.仅在Web感知Spring ApplicationContext的上下文中有效.
5

global-session

这将bean定义范围限定为全局HTTP会话.仅在Web感知Spring ApplicationContext的上下文中有效.

在此本章,我们将讨论前两个范围,剩下的三个将讨论关于Web感知的Spring ApplicationContext.

单例范围

如果作用域设置为singleton,则Spring IoC容器只创建该bean定义定义的对象的一个实例.此单个实例存储在此类单例bean的缓存中,该命名bean的所有后续请求和引用都返回缓存对象.

默认范围始终为singleton.但是,当您需要一个且只有一个bean实例时,可以在bean配置文件中将 scope 属性设置为 singleton ,如以下代码段和减号所示;

   

示例

让我们有一个正常运行的Eclipse IDE,并按照以下步骤创建一个Spring应用程序 :  ;

步骤描述
1创建一个名为 SpringExample 的项目,并在创建的项目中的 src 文件夹下创建一个包 com.it1352.
2使用添加外部JAR添加所需的Spring库选项,如 Spring Hello World示例章节中所述.
3 com.it1352包下创建Java类 HelloWorld MainApp .
4创建Beans配置文件 Bean src 文件夹下的.xml .
5最后一步是创建所有Java文件和Bean配置文件的内容并运行应用程序,如下所述.

以下是 HelloWorld.java 文件的内容 :

package com.it1352; public class HelloWorld {   private String message;   public void setMessage(String message){      this.message  = message;   }   public void getMessage(){      System.out.println("Your Message : " + message);   }}

以下是 MainApp.java 文件的内容 :

package com.it1352; import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp {   public static void main(String[] args) {      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");      HelloWorld objA = (HelloWorld) context.getBean("helloWorld");      objA.setMessage("I'm object A");      objA.getMessage();      HelloWorld objB = (HelloWorld) context.getBean("helloWorld");      objB.getMessage();   }}

以下是单例范围和减号所需的配置文件 Beans.xml ;

      

完成源和bean配置文件的创建后,让我们运行应用程序.如果您的应用程序一切正常,它将打印以下消息 :

Your Message : I'm object AYour Message : I'm object A

原型范围

如果范围设置为原型,则为Spring IoC每次发出对该特定bean的请求时,container都会创建该对象的新bean实例.通常,对所有state-full bean使用原型范围,对无状态bean使用singleton范围.

要定义原型范围,可以设置范围 bean配置文件中的 prototype 属性,如下面的代码片段 :

   

示例

让我们使用Eclipse IDE并按照以下步骤创建Spring应用程序 :

Steps描述
1创建一个名为 SpringExample 的项目,并在创建的项目中的 src 文件夹下创建一个包 com.it1352.
2使用添加外部JAR添加所需的Spring库选项,如 Spring Hello World Example 章节中所述.
3 com.it1352包下创建Java类 HelloWorld MainApp .
4创建Beans配置文件 Bean. src 文件夹下的xml .
5最后一步是创建所有Java文件和Bean配置文件的内容并运行应用程序,如下所述.

以下是 HelloWorld.java 文件的内容

package com.it1352; public class HelloWorld {   private String message;   public void setMessage(String message){      this.message  = message;   }   public void getMessage(){      System.out.println("Your Message : " + message);   }}

以下是 MainApp.java 文件的内容 :

package com.it1352; import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp {   public static void main(String[] args) {      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");      HelloWorld objA = (HelloWorld) context.getBean("helloWorld");      objA.setMessage("I'm object A");      objA.getMessage();      HelloWorld objB = (HelloWorld) context.getBean("helloWorld");      objB.getMessage();   }}

以下是原型范围和减号所需的配置文件 Beans.xml ;

      

完成源和bean配置文件的创建后,让我们运行应用程序.如果您的应用程序一切正常,它将打印以下消息 :

Your Message : I'm object AYour Message : null