使用构造函数在配置中进行Spring惰性初始化

7uhlpewt  于 2023-03-22  发布在  Spring
关注(0)|答案(1)|浏览(131)

我有一个组件

@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);
    }
}

但是当ExpenseCalculator初始化时,purchaseService不再是@Lazy组件,purchaseService也被初始化。
有没有什么方法可以使用configuration延迟初始化purchaseService

k97glaaz

k97glaaz1#

您必须在两个位置使用@Lazy注解PurchaseService-创建它们的位置和自动连接它们的位置。
参见A Quick Guide to the Spring @Lazy Annotation帖子,在2.2中。@Autowired部分存在注解:

Note, that the @Lazy is mandatory in both places.

相关问题