我想將我的 pojo 類更改為 spring,我在將 protoype 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)
}
}
插入 BankBusiness 類不是執行緒安全的,我需要為每個服務呼叫從它實體化,我現在重寫代碼如下:
@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)
}
}
第二種情況的行為是否與第一種情況相同?
uj5u.com熱心網友回復:
不一樣。
在第一個場景中,您InsertBankBusiness每次訪問它時都會創建服務,但在第二個場景中,每個 HTTP 請求都會創建一次服務。
您需要使用Prototype范圍而不是Request具有相同的行為。
@Scope(value= "prototype", proxyMode=TARGET_CLASS)
public class InsertBankBusiness {
}
InsertBankBusiness通過作用域代理正確注入。每次呼叫代理物件上的方法時,代理都會自行決定是創建真實物件的新實體還是重用現有物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/450858.html
