【问题标题】:Spring lazy initialization in configuration with constructor使用构造函数在配置中进行 Spring 延迟初始化
【发布时间】:2020-06-22 06:39:37
【问题描述】:

我有一个组件

@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 被初始化。

有什么方法可以使用configurationpurchaseService 进行延迟初始化?

【问题讨论】:

  • @Lazy而不是@Bean方法注释配置中的方法参数。

标签: java spring lazy-initialization


【解决方案1】:

您必须在两个地方都使用 @Lazy 注释您的 PurchaseService - 创建它们的位置以及自动装配它们的时间。请参阅 https://www.baeldung.com/spring-lazy-annotation#2-with-autowired ,评论:“请注意,@Lazy 在这两个地方都是强制性的。”

【讨论】:

    猜你喜欢
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    相关资源
    最近更新 更多