【发布时间】:2019-01-25 22:58:09
【问题描述】:
我确实使用 Spring 和 Lombok。
如果没有原型 bean,我们必须传递目标类所需的依赖项。
我们如何将 bean 标记为原型并正确处理依赖 bean 和构造函数参数?
选项 1 - 没有原型 bean
@Component @RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class Consumer {
private final SomeDependency iDontNeed; // Consumer class doesn't need
private final SomeDependency2 iDontNeed2;
public void method() {
new Processor("some random per request data", iDontNeed, iDontNeed2);
}
....
@Value @RequiredArgsConstructor
public class Processor {
private final String perRequestInputData;
private final SomeDependency iReallyNeed;
private final SomeDependency2 iReallyNeed2;
}
选项 2 - 原型 bean
@Component @RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class Consumer {
private final Provider<Processor> processorProvider;
public void method() {
Processor p = processorProvider.get();
p.initializeWith("some random per request data");
}
....
@Component @Scope("prototype")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class Processor {
private final SomeDependency iReallyNeed;
private final SomeDependency2 iReallyNeed2;
private String perRequestInputData; //wish I was final
private boolean initialized; //wish I was not needed
public void initializeWith(String perRequestInputData) {
Preconditions.checkState(!initialized);
this.perRequestInputData = perRequestInputData
initialized = true;
}
}
【问题讨论】:
-
我假设您收到了反对票,因为关于“较小的邪恶”的问题完全是主观的。也许用不变性和您希望实现的任何其他方面来重新表述这个问题。
-
我同意@jaco0646。问题的措辞方式会引起意见,但完全可以客观地回答。这是一个需要调整的好问题。
-
感谢您的反馈,我已经改写了我的问题。
标签: java spring design-patterns lombok