【发布时间】:2016-01-31 02:28:27
【问题描述】:
我是 IOC 和 DI 的相对论新手,所以我猜我在这里遗漏了一些高级设计原则,但我无法弄清楚如何让我的架构正常工作。
我有一个 REST API 端点,它接受两条 POST 数据:客户 ID 和类型 ID。然后,其余 api 需要为该特定客户/类型组合返回一组数据。
控制器获取通过发布数据传入的实体 ID,并通过 JPA 存储库为它们获取适当的实体。
然后我构造一个数据生成器对象(将实体作为构造函数参数),并使用它来处理 API 的所有数据收集。
问题:因为数据生成器采用两个动态构造函数参数,所以它不能被 DI'ed 到 Controller 中,而是必须使用 new 生成。但是,在数据生成器内部,我需要访问 JPA 存储库。访问这些存储库的唯一方法是通过 DI。但是我不能 DI,因为对象是 new'ed 而不是 IOC 容器的 DI'ed。
有没有办法构建这个,这样我就不会遇到这个问题?我是否违反了有关国际奥委会的一些规则?我在某处有错误的假设吗?任何建议表示赞赏。
谢谢!
编辑:数据生成器的伪代码
public class DataGenerator {
private Customer customer;
private Type type
public DataGenerator(Customer customer, Type type) {
this.cusomter = customer;
this.type = type;
}
public generateData() {
if(customer == x && type == y) {
//JPA REPOSITORY QUERY
} else {
//DIFFERENT JPA REPOSITORY QUERY
}
}
}
【问题讨论】:
-
如果提供生成器的简短代码,问题可能会更清楚。
-
感谢您的输入 - 提供的伪代码。
标签: java spring dependency-injection inversion-of-control