Cpt*_*ard 7 dependency-injection guice jdbi dropwizard
我目前正在构建一个Dropwizard + Guice + Jersey-based应用程序,其中数据库访问暂时由JDBI处理.
我想要实现的是拥有典型的企业架构,其中Resources访问服务类访问DAO类,而DAO类又访问数据库.如果所有其他方法都失败了,我想我可以在应用程序的run()方法中构建我的对象图,这将很高兴以正确的DI方式连接所有这些.
所以,我遇到了之前提到的这个问题:获取DBIFactory需要环境和配置,当Guice执行注入魔法而不是run()时,它需要在某种程度上可用. .
作为一个Dropwizard和Guice noob,到目前为止我设法把它放在一起就是我需要一个Provider来为我的DAO对象提供一些东西.
public class UserDAOProvider implements Provider<UserDAO> {
    @Inject
    Environment environment;
    @Inject
    Configuration configuration;
    @Override
    public UserDAO get() {
        final DBIFactory factory = new DBIFactory();
        final (MyConfiguration) config = (MyConfiguration) configuration;
        DBI jdbi = null;
        try {
            jdbi = factory.build(environment, config.getDataSourceFactory(),
                    "mysql");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return jdbi.onDemand(UserDAO.class);
    }
}
将此注册为单身提供商应该让我将UserDAO注入我的服务.
现在,我们如何实际将环境注入到Provider中?目前我被困在Guice抱怨没有为环境找到合适的构造函数,所以它试图实例化它而不是从Dropwizard本身获取它.
看起来这是可行的; 有一个dropwizard-guice包,我认为DropWizardEnvironmentModule是我需要的.但我觉得我只是错过了一些难题,以便了解如何将事情放在一起.到目前为止,我还没有找到一个完整的工作示例......
这就是我使用 Guice 和 Dropwizard 的方式。在 run() 方法中添加以下行
Guice.createInjector(new ConsoleModule()); 
您不能注入 Environ
创建类 ConsoleModule
public class ConsoleModule extends AbstractModule {
    //configuration and env variable declaration
    public  ConsoleModule(ConsoleConfiguration consoleConfig, Environment env)
    {
        this.consoleConfig = consoleConfig;
        this.env= env;
    }
    protected void configure()
    {
        //You should not inject Configuration and Environment in your provider since you are mixing     
        //dropwizard framework stuff with Guice.Neverthless you will have to bind them in the below order
        bind(Configuration.class).toInstance(consoleConfig.class);
        bind(Environment.class).toInstance(env.class);
        bind(UserDAO.class).toProvider(UserDAOProvider.class).in(Singleton.class);
    }
}
| 归档时间: | 
 | 
| 查看次数: | 15531 次 | 
| 最近记录: |