Guice的SparkJava JOOQ依赖注入

我正在编写一个简单的 CRUD 应用程序,该应用程序将从数据库中获取个人记录,并且我正在使用 SparkJava 框架,但我有可以获取的工作代码从数据库中记录,但我想提取 JOOQ DSLContext 代码并将其作为bean注入并在另一个类中进行初始化,以获取更多信息更干净的代码,但我不确定如何实现它,这是目前可容纳所有内容的主要方法:

 public static void main(String[] args) throws IOException {
    final BasicDataSource ds = new BasicDataSource();
    final Properties properties = new Properties();
    properties.load(BankApiapplication.class.getResourceAsStream("/application.properties"));
    ds.setDriverClassname(properties.getProperty("db.driver"));
    ds.setUrl(properties.getProperty("db.url"));
    ds.setusername(properties.getProperty("db.username"));
    ds.setPassword(properties.getProperty("db.password"));

    final ConnectionProvider cp = new DataSourceConnectionProvider(ds);
    final Configuration configuration = new DefaultConfiguration()
            .set(cp)
            .set(SQLDialect.H2)
            .set(new ThreadLocalTransactionProvider(cp,true));
    final DSLContext ctx = DSL.using(configuration);
    final JSONFormat format = new JSONFormat().format(true).header(false).recordFormat(JSONFormat.RecordFormat.OBJECT);

    port(8080);

    get("/persons",(request,response) -> {
        return ctx.select().from(Person.PERSON).fetch().formatJSON();
    });
}

我如何提取用于初始化数据源并配置 DSLContext 的代码,而只能注入 DSLContext 或某种 DSLContextHolder 并进行查询?

esp281952531 回答:Guice的SparkJava JOOQ依赖注入

因此,通常来说,您要注入可以的最高级别对象。这与the Law of Demeter有关,简而言之,即组件可以知道其直接依赖关系,但不应该知道那些依赖关系的依赖关系。

就您而言,您实际上只使用DSLContextctx)。 [这里的注释:您的代码有很多两个字母的名称-很难遵循。如果您写出例如ctx -> dslContextcp -> connectionProvider]。这意味着您实际上只希望您的方法了解DSLContext,而不是其依赖项。因此,最好将以下内容放入模块,然后将插入DSLContext

  1. Configuration
  2. ConnectionProvider
  3. Properties
  4. BasicDataSource

如果仅在main()中使用所有这些内容,则可以编写一个Provider以返回DSLContext。如果其中一些在多个地方使用(除了实例化此main()的{​​{1}}),那么它们可以放在自己的DSLContext中。例如,如果将Provider放在自己的Provider中,则DSLContext的{​​{1}}会是这样:

Configuration

然后,在您的Provider中,您应输入:

public class MyModule extends AbstractModule {

    // other providers
    // ...

    @Provides
    @Singleton
    public DSLContext dslContext(Configuration configuration) {
        return SL.using(configuration);
    }
}
本文链接:https://www.f2er.com/2956569.html

大家都在问