Spring Bean作用域
默认情况下,所有的 Spring Bean 都是单例的,也就是说在整个 Spring 应用中, Bean 的实例只有一个。
Spring 5 共提供了 5种 scope 作用域,
1.singleton :bean在每个Spring ioc 容器中只有一个实例。
2.prototype:一个bean的定义可以有多个实例。
3.request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
4.session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
5.global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
singleton
singleton 是 Spring 容器默认的作用域、当 Bean 的作用域为 singleton 时,Spring IoC 容器中只会存在一个共享的 Bean 实例、这个 Bean 实例将存储在高速缓存中,所有对于这个 Bean 的请求和引用,只要 id 与这个 Bean 定义相匹配,都会返回这个缓存中的对象实例。
如果一个 Bean 定义的作用域为 singleton ,那么这个 Bean 就被称为 singleton bean。在 Spring IoC 容器中,singleton bean 是 Bean 的默认创建方式,可以更好地重用对象,节省重复创建对象的开销。
在 Spring 配置文件中,可以使用 <bean> 元素的 scope 属性,将 Bean 的作用域定义成 singleton,其配置方式如下所示:
- <bean id="..." class="..." scope="singleton"/>
示例 1
创建一个名为 SingletonBean 的类
public class SingletonBean {
private String str;
public void setStr(String str) {
this.str = str;
}
}
创建 Spring 配置文件 Beans.xml
<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="test单例模式"></property>
</bean>
</beans>
创建一个名为 Main 的类
public class Main {
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);
}
}
5. 运行 main() 方法控制台输出如下。
com.tt.SingletonBean@65e2dbf3
com.tt.SingletonBean@65e2dbf3
- 点赞
- 收藏
- 关注作者
评论(0)