在Spring中,bean作用域用于确定哪种类型的 bean 实例应该从Spring容器中返回给调用者。bean支持的5种范围域:
单例 - 每个Spring IoC 容器返回一个bean实例
原型 - 当每次请求时返回一个新的bean实例
请求 - 返回每个HTTP请求的一个Bean实例
会话 - 返回每个HTTP会话的一个bean实例
全局会话 - 返回全局HTTP会话的一个bean实例
在大多数情况下,可能只处理了 Spring 的核心作用域 - 单例和原型,默认作用域是单例。
注:意味着只有在一个基于web的Spring ApplicationContext情形下有效。
1. 单例
ArticleService articleService1 = (ArticleService) ctx.getBean("articleService");
ArticleService articleService2 = (ArticleService) ctx.getBean("articleService");
System.out.println(articleService1);
System.out.println(articleService2);
输出结果
com.angelia.spring.service.ArticleServiceImpl@192d3247
com.angelia.spring.service.ArticleServiceImpl@192d3247
2.原型
在原型作用域,必须为每个 getBean()方法中调用返回一个新的实例。
<bean id="articleService" class="com.angelia.spring.service.ArticleServiceImpl" scope="prototype" />
输出结果
com.angelia.spring.service.ArticleServiceImpl@192d3247
com.angelia.spring.service.ArticleServiceImpl@3ecd23d9
3. Bean作用域注释@Scope
@Service
@Scope("prototype")
public class ArticleServiceImpl implements ArticleService {
...
}