1. 程式人生 > >SpringBoot中的Bean作用域————@scope

SpringBoot中的Bean作用域————@scope

註解說明

  • 使用註解: @scope
  • 效果:指定Bean的作用域 ,預設的是singleton,常用的還有prototype

Scope的全部可選項

  1. singleton 全域性只有一個例項,即單例模式
  2. prototype 每次注入Bean都是一個新的例項
  3. request 每次HTTP請求都會產生新的Bean
  4. session 每次HTTP請求都會產生新的Bean,該Bean在僅在當前session內有效
  5. 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());
    }
}

相同Bean

原型模式示例

在兩個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 {
}

不同Bean