簡體   English   中英

Spring 使用構造函數在配置中進行延遲初始化

[英]Spring lazy initialization in configuration with constructor

我有一個組件

@Component
public class ExpenseCalculator {
    @Autowired
    private TaxService taxService;

    @Autowired
    private EmployeeService employeeService;

    @Autowired
    @Lazy
    private PurchaseService purchaseService;
}

這里PurchaseService僅在調用使用purchaseService的代碼的任何部分時才被初始化(?)。

現在我必須將ExpenseCalculator移動一個配置 class (它沒有@Component注釋)

@Configuration
public class ExpenseConfig {
    @Bean
    @Lazy
    public ExpenseCalculator getExpenseCalculator(
        TaxService taxService, 
        EmployeeService employeeService,
        PurchaseService purchaseService
    ) {
        return new ExpenseCalculator(taxService, employeeService, purchaseService);
    }
} 

但是,當ExpenseCalculator被初始化時, purchaseService不再是@Lazy組件, purchaseService被初始化。

有什么方法可以使用configuration來延遲初始化purchaseService嗎?

您必須在兩個地方都使用 @Lazy 注釋您的 PurchaseService - 創建它們的位置以及自動裝配它們的時間。 請參閱https://www.baeldung.com/spring-lazy-annotation#2-with-autowired ,評論:“請注意,@Lazy 在這兩個地方都是強制性的。”

暫無
暫無

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

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