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"返回新对象。