定义< 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