Spring在创建新Bean时,可以选择其作用域,共有五种。
分别为:singleton ,prototype ,request ,session ,global-session.
singleton:将bean的定义的限制在每一个Spring Ioc容器中一个单一的实例。
prototype:将单一的Bean定义限制在任意数量的对象实例。
request:将Bean的定义限制在HTTP请求。
session:将Bean的定义限制在HTTP会话。
global-session:将Bean的定义限制在全局HTTP会话。
Spring在产生一个新的Bean实例时,若想强制Spring每次都生成一个新的Bean实例,作用域选择prototype;若想Spring在每次需要时都返回同一个Bean实例,则应选择作用域为singleton。
假设HelloWorld.java中有私有属性message,和他的getter/setter方法。
1.实例singleton作用域
编写Main.java
public class Main{
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
HelloWorld obj1 = (HelloWorld)context.getBean("helloWorld");
obj1.setMessage("我是第一个obj");
obj1.getMessage();
HelloWorld obj2 = (HelloWorld)context.getBean("helloWorld");
obj2.getMessage();
}
}
下面是bean.xml中bean的配置
<bean id = "helloWorld" class = "HelloWorld" scope = "singeleton">
</bean>
此时的控制台输出为
*我是第一个obj
我是第一个obj*
2.实例prototype作用域
public class Main{
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
HelloWorld obj1 = (HelloWorld)context.getBean("helloWorld");
obj1.setMessage("我是第一个obj");
obj1.getMessage();
HelloWorld obj2 = (HelloWorld)context.getBean("helloWorld");
obj2.getMessage();
}
}
下面是bean.xml中bean的配置
<bean id = "helloWorld" class = "HelloWorld" scope = "prototype">
</bean>
此时的控制台输出为
**我是第一个obj
null**