我开始使用Dropwizard,并尝试创建一个需要使用数据库的命令。如果有人想知道我为什么要这么做,我可以提供很好的理由,但这不是我的问题的重点。它是关于Dropwizard中的依赖关系反转和服务初始化和运行阶段。
Dropwizard鼓励使用其DbiFactory构建DBI实例,但为了获得一个实例,您需要Environment
实例和/或数据库配置:
public class ConsoleService extends Service<ConsoleConfiguration> {
public static void main(String... args) throws Exception {
new ConsoleService().run(args);
}
@Override
public void initialize(Bootstrap<ConsoleConfiguration> bootstrap) {
bootstrap.setName("console");
bootstrap.addCommand(new InsertSomeDataCommand(/** Some deps should be here **/));
}
@Override
public void run(ConsoleConfiguration config, Environment environment) throws ClassNotFoundException {
final DBIFactory factory = new DBIFactory();
final DBI jdbi = factory.build(environment, config.getDatabaseConfiguration(), "postgresql");
// This is the dependency I'd want to inject up there
final SomeDAO dao = jdbi.onDemand(SomeDAO.class);
}
}
如您所见,您的 run()
方法中有服务及其环境的配置,但需要在其 initialize()
方法中将命令添加到服务的引导程序中。
到目前为止,我已经能够通过在我的命令中扩展ConfiguredCommand并在其run()
方法中创建DBI
实例来实现这一点,但这是一个糟糕的设计,因为依赖关系应该注入对象中,而不是在内部创建它们。
我更喜欢通过它们的构造函数注入DAO或我的命令的任何其他依赖项,但这对我来说目前似乎是不可能的,因为当我需要创建并将它们添加到它的引导程序时,环境
和配置在服务初始化中是不可访问的。
有人知道如何实现这一点吗?
这就是我如何在Dropwizard中使用Guice。在run()方法中添加行
Guice.createInjector(new ConsoleModule());
创建类ConsoleModule
public class ConsoleModule extends AbstractModule {
public ConsoleModule(ConsoleConfiguration consoleConfig)
{
this.consoleConfig = consoleConfig;
}
protected void configure()
{
bind(SomeDAO.class).to(SomeDAOImpl.class).in(Singleton.class)
}
}
你能使用环境命令吗?
我目前正在构建一个基于Dropwizard Guice泽西岛的应用程序,其中数据库访问暂时由JDBI处理。 我试图实现的是使用典型的企业架构,其中资源访问服务类访问DAO类,DAO类反过来访问数据库。以适当的DI方式将所有这些连接起来会很好,尽管我想如果其他方法都失败,我可以在应用程序的run()方法中构建对象图。 所以,我遇到了之前提到过的问题:获取DBIFactory需要环境和配置,它们需要在
这是我的gradle档案: 在添加了Atmospher-Jursey之后,我得到了以下错误:
6.3. 命令注入 使用系统命令是一项危险的操作,尤其在你试图使用远程数据来构造要执行的命令时更是如此。如果使用了被污染数据,命令注入漏洞就产生了。 Exec()是用于执行shell命令的函数。它返回执行并返回命令输出的最后一行,但你可以指定一个数组作为第二个参数,这样输出的每一行都会作为一个元素存入数组。使用方式如下: <?php $last = exec('ls', $output, $ret
试图创建一个自定义的,我可以通过Jersey注入到我的资源中。 这在本问题的Java中有涉及。我已经阅读了有关这方面的文档,这些文档也是用Java编写的。最后,GitHub中的一些代码涵盖了相同的主题(通过Dropwizard完成)。 这将全部编译,但在运行时失败,出现以下异常 我不知道是我在向Scala的转换中犯了错误,还是我在注册绑定器时做了错误的事情。
问题内容: 我在与dropwizard的合作中是相当新的。目前,我正在尝试实施HK2依赖项注入。在资源内部可以很好地工作,但是在资源外部不能工作。这是我在做什么: 我创建要注入的类的实例并绑定它们。 在我的资源中,注入工作: 所有这些变量都填充有正确类的实例。 问题是:ContentModuleManager还应该通过注入来获取其中一些类: 但是这些都是空的。有人可以解释为什么这个问题会发生,我该
我正在开发一个遗留的JSF应用程序,我们正在慢慢地将其移植到Spring MVC。我们正在使用Spring Security来控制登录信息。在用户登录之后,JSF页面全局地实例化一个在任何地方都使用的会话作用域bean。我想更改应用程序,这样我们就可以先进入用Spring MVC开发的页面。 我尝试的一种方法是将bean转换为spring bean,并将其注入JSF,但不幸的是,这需要对bean进