您现在的位置是:首页 > 文章详情

Spring Bean Scopes作用域

日期:2018-10-14点击:533

当定义一个Spring的<bean>,必须声明bean 作用域的选项。例如,要强制Spring需要产生一个新的bean实例,应该声明bean的scope属性为prototype。如果你希望Spring 每次都返回同一个bean实例,应该声明bean的作用域,方式类似属性是单例。

Spring框架支持以下五个作用域,其中三个只有当您使用Web感知的 ApplicationContext 可用。

范围 描述
singleton This scopes the bean definition to a single instance per Spring IoC container (default).
prototype This scopes a single bean definition to have any number of object instances.
request This scopes a bean definition to an HTTP request. Only valid in the context of a web-aware Spring ApplicationContext.
session This scopes a bean definition to an HTTP session. Only valid in the context of a web-aware Spring ApplicationContext.
global-session This scopes a bean definition to a global HTTP session. Only valid in the context of a web-aware Spring ApplicationContext.

本章将讨论前两个范围和其余三将讨论的时候,我们将讨论有关Web感知Spring的ApplicationContext。

singleton作用域:

如果范围设置为单例,Spring IoC容器创建了一个由该bean定义的对象只有一个实例。这个单一实例存储在这样的单例bean的高速缓存,以及所有后续请求和引用针对该bean返回缓存对象。

默认范围是始终单例,但是当你需要bean的一个实例,可以设置的范围属性单例在bean配置文件中,如下图所示:

 
<!-- A bean definition with singleton scope -->

<bean id = "..." class = "..." scope = "singleton" >
<!-- collaborators and configuration for this bean go here -->
</bean>

示例:

让我们使用Eclipse IDE,然后按照下面的步骤来创建一个Spring应用程序:

步骤 描述
1 Create a project with a name SpringExample and create a package com.yiibai under the src folder in the created project.
2 Add required Spring libraries using Add External JARs option as explained in the Spring Hello World Example chapter.
3 Create Java classes HelloWorld and MainApp under the com.yiibai package.
4 Create Beans configuration file Beans.xml under the src folder.
5 The final step is to create the content of all the Java files and Bean Configuration file and run the application as explained below.

这里是HelloWorld.java 文件的内容:

 
package com . yiibai ;
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 . yiibai ;

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 ();
}
}

以下是需要singleton作用域配置文件beans.xml文件:

 
<? xml version = "1.0" encoding = "UTF-8" ?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" >
<bean id = "helloWorld" class = "com.yiibai.HelloWorld"
scope = "singleton" >
</bean>
</beans>

一旦创建源代码和bean配置文件来完成,运行应用程序。如果一切顺利,这将打印以下信息:

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

原型作用域:

如果范围设置为原型,那么Spring IoC容器创建对象的新的bean实例为每个特定的bean发出请求时的时间。作为一项规则,使用prototype作用域为所有状态的bean类和singleton作用域为无状态的bean。

要定义一个原型作用域,可以设置的范围属性为原型的bean配置文件中,如下图所示:

 
<!-- A bean definition with singleton scope -->
<bean id = "..." class = "..." scope = "prototype" >
<!-- collaborators and configuration for this bean go here -->
</bean>

示例:

让我们在地方工作的Eclipse IDE,然后按照下面的步骤来创建一个Spring应用程序:

步骤 描述
1 Create a project with a name SpringExample and create a package com.yiibai under the src folder in the created project.
2 Add required Spring libraries using Add External JARs option as explained in the Spring Hello World Example chapter.
3 Create Java classes HelloWorld and MainApp under the com.yiibai package.
4 Create Beans configuration file Beans.xml under the src folder.
5 The final step is to create the content of all the Java files and Bean Configuration file and run the application as explained below.

这里是HelloWorld.java 文件的内容:

 
package com . yiibai ;
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 . yiibai ;
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:

 
<? xml version = "1.0" encoding = "UTF-8" ?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" >
<bean id = "helloWorld" class = "com.yiibai.HelloWorld"
scope = "prototype" >
</bean>

</beans>

创建源代码和bean配置文件完成后,让我们运行应用程序。如果一切顺利,这将打印以下信息:

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

原文发布时间为:2018-10-14
本文来自云栖社区合作伙伴“ Java杂记”,了解相关信息可以关注“ Java杂记”。
原文链接:https://yq.aliyun.com/articles/652524
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章