dependency-injection - 我可以将 Cayenne 配置为使用提供程序来获取模型的新实例吗?
问题描述
我想通过 Guice 向新的 Cayenne 数据对象提供构造函数参数,但看起来 cayenne 只是使用 Class.newInstance() 来实例化新实例。有没有办法让 Cayenne 使用提供程序来获取新实例?例如,在获取期间实例化新实例时,我需要它来执行此操作,而不仅仅是在我创建新实例时。
稍微扩展一下,我有一个 Maven 项目,其中包含所有 Cayenne 模型和核心业务逻辑。然后我有另一个带有 API 实现的 Maven 项目。我希望能够在 API 项目中配置参数并让模型在运行时使用这些参数。
因此,可以使用构造函数注入或提供方法来做到这一点 - 任何一个都可以。
有没有办法做到这一点?
public class Foo extends _Foo { //_Foo extends CayenneDataObject
private final String hey;
public Job(@Inject @Named("foo-job") String hey) {
super();
this.hey = hey;
}
}
解决方案
Cayenne 持久对象不通过依赖注入 (DI) 进行管理。DI 适用于数量相对较少的服务,而不适用于潜在的大量持久对象。
将某些值传递给对象的一种更惯用的方法是通过 Cayenne回调和侦听器。回调可以在 Modeler 中映射,并且不能对对象之外的应用有任何引用。因此,对于您的案例,听众可以成为一个解决方案。它们可以在 Guice 中进行 DI 管理和映射。
推荐阅读
- iphone - 如何在 Flutter 中为 iOS 的 CupertinoPicker/CupertinoDatePicker 添加/启用自动收报机声音?
- c++ - 使用 std::function 映射对象方法
- python - Python没有将正确的内容写入csv
- javascript - 如何将返回数据中的值传递给 vue.js 中的另一个脚本 [mounted()]
- python - 添加和删除 QTreeWidgetItems 的复选框
- c++ - 具有内存和隔离的 SQLite
- php - 提交tinymce编辑器后未发送数据库中的所有数据
- angular - 从角度下载图像
- java - 我正在嘲笑的对象是我认为的对象吗?通缉但未调用错误
- tfs - 在 Azure DevOps 中仅授予董事会访问权限