簡體   English   中英

為什么在Java和Spring Boot項目的依賴注入中使用final關鍵字?

[英]Why final keyword is used at dependency injection in Java and Spring Boot projects?

我正在學習 Spring Boot 和依賴注入以及 Java,我在所有項目中看到,當開發人員注入他們使用 final 關鍵字的依賴項時,我想知道為什么使用 final 而不是不使用它? 這對性能或其他方面有好處嗎? 我知道變量的值不會改變,因為使用了 final 關鍵字並且每次都使用相同的 bean,所以 final 關鍵字在這種情況下起作用。 但這對性能有好處還是對 JVM 有任何幫助? 或者只是因為是可以用final的情況才用,用final是沒有問題的,因為orderRepository等字段每次都會用到同一個bean。 謝謝!

@Component
@RequiredArgsConstructor
public class OrderCreateHelper {
    private final DomainService domainService;
    private final OrderRepository orderRepository;
    private final CustomerRepository customerRepository;
    private final RestaurantRepository restaurantRepository;

...
}

在 Java 中使用 final 關鍵字有幾個好處,包括確保變量的值一旦設置就不能更改。 在依賴注入和 Spring Boot 的上下文中,使用 final 關鍵字有助於確保被注入的依賴項不會隨后被修改,這有助於防止意外的副作用並使代碼更易於理解和維護。

在性能方面,使用 final 關鍵字可能會對您的應用程序的性能產生輕微的影響,但這種影響通常可以忽略不計。 在此上下文中使用 final 關鍵字的主要好處是使代碼更加清晰易懂,而不是出於性能原因。

通常,Java 虛擬機 (JVM) 能夠自動優化代碼的性能,您無需擔心代碼執行方式的底層細節。 JVM 能夠執行各種優化,例如內聯方法調用和在堆棧而不是堆上分配對象,以提高代碼的性能。

也就是說,在某些情況下使用 final 關鍵字可以幫助 JVM 優化您的代碼。 例如,如果您聲明一個在循環中使用的 final 變量,JVM 可以通過內聯 final 變量的值來優化循環,而不必在循環的每次迭代中查找變量的值環形。

然而,一般來說,不必擔心使用 final 關鍵字對性能的影響,您應該在適當的時候使用它,以使您的代碼更清晰、更容易理解。

據我所知,Lombok 的@RequiredArgsConstructor注釋會自動創建構造函數,其中的字段標記為final或標有@NonNull注釋。 然后Srping Boot自動進行構造函數注入。

暫無
暫無

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

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