首先看待它的一种方式是,Ebean 拥有一个 EbeanServer 实例的寄存器/映射,其中一个实例可以定义为默认服务器。
但是没有要求使用 Ebean 或注册 EbeanServer 实例。也就是说,可以创建 EbeanServer 实例并且不向 Ebean 注册,这样您就永远不需要/使用/想要 Ebean(更纯粹的 DI 风格)。
换种说法 - EbeanServer 是真实/实际的实现,您必须有一个 EbeanServer 实例。您可以选择向 Ebean 注册一个 EbeanServer 实例(大多数人都这样做),如果您注册了 EbeanServer 实例,那么它将可供 Ebean 单例使用,并且 Ebean 上的方法是快速快捷方式。
您可以同时使用两者,这在依赖注入场景中是合理的(请参阅http://ebean-orm.github.io/docs/setup/guice)。因此,您使用 Guice 提供程序或 Spring 工厂 bean 创建 EbeanServer 实例,并将该实例注册到 Ebean 单例中。通过这种方式,您既可以使用 DI(Guice/Spring)@Inject EbeanServer 实例,同时也可以通过 Ebean.getDefaultServer() 获得完全相同的 EbeanServer 实例(并且通过这种方式也可以使用 Model/Finder/Ebean ala 活动记录) .
所以关于你的问题:
问:EbeanServer 是否适合以编程方式创建 EbeanServer?
EbeanServerFactory 用于创建 EbeanServer 实例。参考http://ebean-orm.github.io/docs/setup/serverconfig
问:我可以通过调用Ebean.getServer(String name) 来获取EbeanServer 对象来使用EbeanServer 提供的所有api吗?
是的,假设 EbeanServer 实例已注册(这是可选的)。参考 ServerConfig.setRegister(boolean) 和 ServerConfig.setDefaultServer(boolean)。
问:在什么情况下我应该使用 Ebean 而不是 EbeanServer(反之亦然)?
在所有情况下,从技术上讲,您都在使用 EbeanServer 实例,所以这实际上是一个风格问题。当实例注册为默认服务器等时,您可以可选地通过 Ebean 单例访问 EbeanServer 实例。
在我称之为“传统依赖注入” 风格的情况下,您根本不会使用 Ebean。使用 Guice/Spring 等将 EbeanServer 实例注入到您的服务中。
在我称之为“活动记录”的风格中,您喜欢使用 Model/Finders/Ebean 所产生的简单和相对干净的代码。我在http://ebean-orm.github.io/docs/setup/activerecord讨论这种风格
总之,选择使用 Ebean 还是 EbeanServer 是一个风格问题。我将这些描述为“传统 DI”和“活跃记录”风格。
现在我还需要指出,在 DI 案例中,您可以根据需要同时使用这两种样式。您既可以@Inject EbeanServer 实例,也可以通过 Ebean 访问它,以启用模型/查找器和活动记录样式。这在 DI 情况下是合理的,您希望对 EbeanServer 实例进行编程配置,但仍希望能够通过 Model 和 Finder 使用活动记录样式。
测试:
测试也涉及到这一点。 avaje-ebeanorm-mocker 项目专门提供了在通过 Ebean/Model/Finder 使用 EbeanServer 实例时模拟它们的机制,因此在使用 avaje-ebeanorm-mocker 时,它可以提供与使用传统注入时相同的可测试性级别的 EbeanServer。
问:Ebean 是否适合通过配置文件创建 EbeanServer?
嗯,是的,不是的。对我来说,您首先要说“我们是否使用 DI/Guice/Spring”,通常如果您是,那么您有一个 guice 提供程序/spring 工厂 bean 来创建 EbeanServer 实例(因为具有更高级 EbeanServer 功能的编程配置是件好事- 例如注入 CurrentUserProvider 实现)。然后,您还选择了是否要向 Ebean 单例注册 EbeanServer 实例,并且这样还可以使用 Model/Finder/Ebean。
在配置文件方面,我的想法是,即使在编程配置中,也最好启用外部属性配置,因此您首先 serverConfig.loadFromProperties(properties),然后以编程方式将内容设置到 serverConfig 中。这使您能够(即使您最初不使用它)通过属性/文件进行外部环境特定配置。
如果您根本不使用依赖注入(小型简单应用程序等),那么 Ebean 和 ebean.properties 是一种非常快速简单的机制。
希望对您的一些问题有所帮助。
干杯,罗伯。