使用构造函数配置的 Spring 惰性初始化

问题描述 投票:0回答:1

我有一个组件

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

    @Autowired
    private EmployeeService employeeService;

    @Autowired
    @Lazy
    private PurchaseService purchaseService;
}

这里

PurchaseService
仅在调用使用
purchaseService
的代码的任何部分时被初始化(?)。

现在我必须移动

ExpenseCalculator
一个配置类(它没有
@Component
注解)

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

但是

purchaseService
不再是
@Lazy
组件,当
ExpenseCalculator
被初始化时,
purchaseService
被初始化。

有什么方法可以使用

purchaseService
来延迟初始化
configuration

java spring lazy-initialization
1个回答
0
投票

你必须在两个地方用

PurchaseService
注释你的
@Lazy
- 你创建它们的地方和你自动装配它们的时间。

请参阅 2.2 中的 Spring @Lazy Annotation 快速指南 帖子。 @Autowired 部分存在评论:

Note, that the @Lazy is mandatory in both places.
© www.soinside.com 2019 - 2024. All rights reserved.