我可以将 Cayenne 配置为使用提供程序来获取模型的新实例吗?

Can I configure Cayenne to use a provider to get a new instance of a model?

我想通过 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 callbacks and listeners。回调可以在建模器中映射,并且不能在对象外部对应用程序有任何引用。因此,对于您的案例,听众可能是一个解决方案。它们可以在 Guice 中进行 DI 管理和映射。