簡體   English   中英

如何將原型 spring bean 注入到 singleton bean

[英]How Inject prototype spring bean to singleton bean

我想將我的 pojo class 更改為 spring,我在將原型 bean 注入 singelton bean 時遇到問題,我的舊代碼如下:

public class InsertBankBusiness(){

    private ServiceInput input;
    
    public void doBusiness(ServiceInput input){
        this.input = input;
        ....
        }
},

public class BankService(){
    
    public void definebank(ServiceInput input){
        InsertBankBusiness insertBankBusiness = InsertBankBusiness ()
        insertBankBusiness .doBusiness(input)
        }

}

Insert BankBusiness class 不是線程安全的,我需要為每個服務調用從它實例化,我現在重寫了代碼如下:

@Component(value="insertBankBusiness")
@Scope(value="request", proxyMode=TARGET_CLASS)
public class InsertBankBusiness(){

    private ServiceInput input;

    public void doBusiness(ServiceInput input){
        this.input = input;
        ....
        }
},

@Service(value="bankService")
public class BankService(){

    @Autowire InsertBankBusiness insertBankBusiness;
    
    public void definebank(ServiceInput input){
        insertBankBusiness.doBusiness(input)
        }

}

第二種情況的行為是否與第一種情況相同?

不一樣。
在第一種情況下,每次訪問時都會創建InsertBankBusiness服務,但在第二種情況下,服務會在每次 HTTP 請求時創建一次。
您需要使用Prototype scope 而不是Request來獲得相同的行為。

    @Scope(value= "prototype", proxyMode=TARGET_CLASS)
    public class InsertBankBusiness {

    }

InsertBankBusiness通過 Scoped Proxy 正確注入。 每次調用代理 object 上的方法時,代理自己決定是創建真實 object 的新實例還是重用現有實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM