作用范围 | 描述 |
---|---|
singleton | 默认值,单例模式,表示在 Spring 容器中只有一个 Bean 实例 |
prototype | 原型模式,表示每次通过 Spring 容器获取 Bean 时,容器都会创建一个新的 Bean 实例。 |
request | 每次 HTTP 请求,容器都会创建一个 Bean 实例。该作用域只在当前 HTTP Request 内有效。 |
session | 同一个 HTTP Session 共享一个 Bean 实例,不同的 Session 使用不同的 Bean 实例。该作用域仅在当前 HTTP Session 内有效。 |
application |
同一个 Web 应用共享一个 Bean 实例,该作用域在当前 ServletContext 内有效。 与 singleton 类似,但 singleton 表示每个 IoC 容器中仅有一个 Bean 实例,而一个 Web 应用中可能会存在多个 IoC 容器,但一个 Web 应用只会有一个 ServletContext,也可以说 application 才是 Web 应用中货真价实的单例模式。 |
websocket | websocket 的作用域是 WebSocket ,即在整个 WebSocket 中有效。 |
<bean id="..." class="..." scope="singleton"/>
package net.biancheng.c; public class SingletonBean { private String str; public void setStr(String str) { this.str = str; } }
<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="singletonBean" class="net.biancheng.c.SingletonBean" scope="singleton"> <property name="str" value="C语言中文网"></property> </bean> </beans>
package net.biancheng.c; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { private static final Log LOGGER = LogFactory.getLog(MainApp.class); public static void main(String[] args) { //获取 ApplicationContext 容器 ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); SingletonBean singletonBean = context.getBean("singletonBean", SingletonBean.class); SingletonBean singletonBean2 = context.getBean("singletonBean", SingletonBean.class); System.out.println(singletonBean); System.out.println(singletonBean2); } }
net.biancheng.c.SingletonBean@65e2dbf3 net.biancheng.c.SingletonBean@65e2dbf3
<bean id="..." class="..." scope="prototype"/>
package net.biancheng.c; public class PrototypeBean { private String str; public void setStr(String str) { this.str = str; } }
<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"> <!--单例模式 singleton--> <bean id="singletonBean" class="net.biancheng.c.SingletonBean" scope="singleton"> <property name="str" value="C语言中文网"></property> </bean> <!--原型模式 prototype--> <bean id="prototypeBean" class="net.biancheng.c.PrototypeBean" scope="prototype"> <property name="str" value="task.lmcjl.com"></property> </bean> </beans>
package net.biancheng.c; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { private static final Log LOGGER = LogFactory.getLog(MainApp.class); public static void main(String[] args) { //获取 ApplicationContext 容器 ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); PrototypeBean prototypeBean = context.getBean("prototypeBean", PrototypeBean.class); PrototypeBean prototypeBean2 = context.getBean("prototypeBean", PrototypeBean.class); System.out.println(prototypeBean); System.out.println(prototypeBean2); } }
net.biancheng.c.PrototypeBean@61f8bee4 net.biancheng.c.PrototypeBean@7b49cea0
本文链接:http://task.lmcjl.com/news/14458.html