SpringBoot中的Bean作用域————@scope
阿新 • • 發佈:2018-12-22
註解說明
- 使用註解: @scope
- 效果:指定Bean的作用域 ,預設的是singleton,常用的還有prototype
Scope的全部可選項
- singleton 全域性只有一個例項,即單例模式
- prototype 每次注入Bean都是一個新的例項
- request 每次HTTP請求都會產生新的Bean
- session 每次HTTP請求都會產生新的Bean,該Bean在僅在當前session內有效
- global session 每次HTTP請求都會產生新的Bean,該Bean在 當前global Session(基於portlet的web應用中)內有效
引入步驟
在類上加入@Scope註解,指定使用的模式,預設是單例模式
示例程式碼
單例模式示例
在兩個MysScopeTest中都注入MyScope,測試結果可以發現兩個MyScopeTest中的MyScope是同一個。
package com.markey.com.markey.annotations.Scope;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope
public class MyScope {
}
package com.markey.com.markey.annotations.Scope; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @Component public class MyScopeTest1 { @Autowired MyScope myScope; @PostConstruct public void sayMyScope() { System.out.println("hello,i am MyScopeTest1, my scope is " + myScope.toString()); } }
package com.markey.com.markey.annotations.Scope; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @Component public class MyScopeTest2 { @Autowired MyScope myScope; @PostConstruct public void sayMyScope() { System.out.println("hello,i am MyScopeTest2, my scope is " + myScope.toString()); } }
原型模式示例
在兩個MysScopeTest中都注入MyScope,測試結果可以發現兩個MyScopeTest中的MyScope不是同一個。
package com.markey.com.markey.annotations.Scope;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("prototype")
public class MyScope {
}