Spring Bean作用域

AngeliaZheng發表於2018-09-13

在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 {
        ...
}

相關文章