sha*_*elk 2 java spring dependency-injection builder autowired
我想在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();
Run Code Online (Sandbox Code Playgroud)
我想withOwner使用UserService给定的ID号作为参数从数据库中获取实际用户。我将如何向构建器注入UserService?
有两种方法可以做到这一点:
1)将服务放入withOwner()方法
new BankAccount.Builder(1234L)
.withOwner(25324, userService)
Run Code Online (Sandbox Code Playgroud)
2)将UserService添加到构建器并创建构建器工厂:
@Component
class BuilderFactory {
@Autowire
private UserService user service
BankAccount.Builder newBuilder(Long id) {
return BankAccount.Builder(service, id);
}
}
Usage:
builderFactory.newBuilder(1234L)
.withOwner(25324)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |