[英]JAVA - Is it possible to have Instance variable in a non-static class which is injected at multiple places?
我的服務中有一個非最終實例變量。 (我使用了一個實例變量,因為它在單個方法流中的不同情況下填充,我不想通過將其設為局部變量來一次又一次地填充它,因為它使用數據庫調用來獲取值)。
現在,這個服務是在我的構造函數中使用private final
關鍵字注入的。 我觀察到此變量將其值存儲在隨后的 API 調用中。
這是因為服務是使用final
關鍵字注入的嗎? 和
private
關鍵字只能解決問題嗎?final
?代碼構造器:
@Slf4j
@Component
@RequiredArgsConstructor
public class Constructor {
private final Service service;
public List<Restriction> checkRestrictions(A a, B b) {
return service.checkRestriction(a, b);
}
服務:
@Slf4j
@Service
@RequiredArgsConstructor
public class Service {
private TeamResponseDto originalDetails = null;
public List<restriction> checkRestriction(A a, B b){
Restriction r1 = method1();
Restriction r2 = method2();
List<Restriction> list = new ArrayList();
list.add(r1);list.add(r2);
return list;
}
private Restriction method1(){
if(something){
return new Restriction();
}
originalDetails = dbCall();
return new Restriction(originalDetails);
}
private Restriction method2(){
originalDetails = originalDetails == null ? DBCall() : originalDetails;
return new Restriction(originalDetails);
}
}
為了避免method2中的DB Call,我寫了上面的結構。 第一次,它工作正常。 第二次,即通過新的 API 調用的新線程,originalDetails 仍然反映它第一次從 DB 獲取的內容。
在您的Service
中有 state 是非常糟糕的主意。 一個簡單的解決方案是將originalDetails
作為參數傳遞,並在 1 個方法調用的 scope 中保留 object 的 state 而不是 scope 寬:object
public class Service {
public List<Restriction> checkRestriction(A a, B b){
TeamResponseDto originalDetails = DBCall();
Restriction r1 = method1(originalDetails);
Restriction r2 = method2(originalDetails);
List<Restriction> list = new ArrayList();
list.add(r1);list.add(r2);
return list;
}
private Restriction method1(TeamResponseDto originalDetails){
if(something){
return new Restriction();
}
return new Restriction(originalDetails);
}
private Restriction method2(TeamResponseDto originalDetails){
return new Restriction(originalDetails);
}
}
作為替代方案,目前,我在父方法中創建了一個空列表,並將其作為參數傳遞給子方法。 在方法內部,檢查列表是否為空,獲取數據並填充列表,否則使用該值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.