Spring bean scopes

时间:2020-02-23 14:35:45  来源:igfitidea点击:

在Spring中,Bean Scope用于决定哪种类型的Bean实例应该从Spring容器返回给调用者。
Spring有5种 Bean型

  • Singleton - 将单个bean定义划分为每个Spring IoC容器的单个对象实例。
  • Prototype - 每次请求时返回新的Bean实例
  • 请求 - 每个HTTP请求返回单个Bean实例。
  • 会话 - 每个HTTP会话返回单个Bean实例。
  • globalsession - 每个全局http会话返回一个bean实例。

在许多情况下,使用Spring的核心范围I.E.Singleton和原型.By Bean的默认范围是单例。
其中我们将在更多详细信息中查看单例和原型范围。

单例bean范围

例子:

在Eclipse IDE中配置Spring,请参阅Hello World示例

1.Country.java:

这是一个简单的pojo类,其中一些属性所以这里的国家有名字。

在package org.igi.javapostssforlarearning中创建country.java .Copy内容到Country.java之后。

package org.igi.javapostsforlearning;
 
public class Country {
 
	String countryName;
 
	public String getCountryName() {
		return countryName;
	}
 
 
	public void setCountryName(String countryName) {
		this.countryName = countryName;
	}
 
}

2.ApplicationContext.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" xmlns:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 <bean id="country" class="org.igi.javapostsforlearning.Country">
 </bean>
</beans>

3.ScopesinspringMain.java.

此类包含Main Function.Create ScopesinspringMain.java在package org.igi.javapostsforlearning .copy以下内容到scopesinspringmain.java之后

package org.igi.javapostsforlearning;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class ScopesInSpringMain{
 
	public static void main(String[] args) {
 
		ApplicationContext appContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
		Country countryObj1 = (Country) appContext.getBean("country");
		countryObj1.setCountryName("Netherlands");
		System.out.println("Country Name:"+countryObj1.getCountryName());
 
		//getBean called second time
		Country countryObj2 = (Country) appContext.getBean("country");
		System.out.println("Country Name:"+countryObj2.getCountryName());
	}
}

4.运行它

当我们将运行上面的应用程序时,我们将按照输出作为输出。

Country Name:Netherlands
Country Name:Netherlands

当我们首次称为getBean和检索的国家对象并将CountryName设置为"Netherlands",而第二次我们叫做GetBean方法,它没有返回与CountryName一样的对象作为"荷兰"。

原型bean范围

现在我们将在上面的XML配置文件中进行更改。
我们将在标签中添加范围属性并将其设置为"原型",然后再次运行它

applicationcontext.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" xmlns:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
 <bean id="country" class="org.igi.javapostsforlearning.Country" scope="prototype">
 </bean>
</beans>

再次运行它:

当我们将运行上面的应用程序时,我们将按照输出作为输出。

Country Name:Netherlands
Country Name:null

当我们首次称为getBean和检索的国家对象并将CountryName设置为"Netherlands",当我们第二次叫做GetBean方法时,它将Null CountryName作为"NULL"返回新对象。