java - 使用 Spring 服务的构建器类
问题描述
我想在 Spring 项目中创建一个构建器类(即实现构建器设计模式的类)。问题是我需要构建器使用一些 Spring 服务。我显然不希望用户在构造函数中明确提供服务,但是当我尝试@Autowire
服务时,我得到了Autowired members must be defined in valid Spring bean
. 我可以用 注释我的构建器@Component
,但这会使它成为一个单例,这对于构建器来说是不可取的。如何在不使其成为单例的情况下向构建器类注入服务?
要使用本文中的示例,假设我有以下构建器:
BankAccount account = new BankAccount.Builder(1234L)
.withOwner(25324)
.atBranch("Springfield")
.openingBalance(100)
.atRate(2.5)
.build();
给定作为参数接收的 id 号,我想withOwner
使用 my从数据库中获取实际用户。UserService
我将如何将 UserService 注入构建器?
解决方案
有两种方法可以做到这一点:
1) 将服务放入 withOwner() 方法
new BankAccount.Builder(1234L)
.withOwner(25324, userService)
2)将UserService添加到Builder并创建builder工厂:
@Component
class BuilderFactory {
@Autowire
private UserService user service
BankAccount.Builder newBuilder(Long id) {
return BankAccount.Builder(service, id);
}
}
Usage:
builderFactory.newBuilder(1234L)
.withOwner(25324)
推荐阅读
- vim - 获取 getchar 的输出而不将其定义为变量
- twitter-bootstrap - 在同一个 div 中组合 row 和 col 是否被认为是一种不好的做法?
- python - 我对列表中输入的检查无法正常工作
- c# - 将 api 有效负载保存为 json 文档
- python - 有没有办法在多台笔记本电脑上训练 ML 模型?
- c# - 如何自动重新定位相机以将整个对象包含在视图中?
- reactjs - 出于奇怪/未知的原因,在 Gatsby 中出现了无样式的内容。如何诊断问题?
- http - 如何使用 Google 表格触发器触发 Google Cloud 函数?
- c++ - 每当我找到密钥时如何增加值?BST
- flutter - 如何在颤动中创建颜色矩阵?