Dropwizard , как описано на их веб-сайте, представляет собой «инфраструктуру Java для разработки высокопроизводительных веб-сервисов RESTful, удобных в использовании». Я использовал его недавно после того, как увидел, что он упоминается в канале Yammer моей компании (как ни странно, фреймворк появился из Yammer), и мне это очень понравилось. Одна из вещей, которые я интегрировал в мои настройки Dropwizard, была Guice , так как довольно быстро я обнаружил, что мне нужен способ внедрить мои зависимости. Остальная часть этой статьи будет посвящена тому, как показать, как склеить Dropwizard и Guice.
Предпосылки
- Работает JDK (я использую Java 1.8)
- Maven 3
Начиная
Начните с использования архетипа быстрого запуска Maven для создания оболочки проекта Maven. Поэтому в терминале выполните следующую команду. Не стесняйтесь изменять groupId и artifactId в соответствии с вашими собственными целями.
$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.github.codingricky -DartifactId=DropWizardGuice -Dversion=1.0-SNAPSHOT
Теперь обновите зависимости в pom.xml, чтобы включить то, что требуется для этой статьи.
<dependencies> <dependency> <groupId>io.dropwizard</groupId> <artifactId>dropwizard-core</artifactId> <version>0.7.0</version> </dependency> <dependency> <groupId>com.hubspot.dropwizard</groupId> <artifactId>dropwizard-guice</artifactId> <version>0.7.0.2</version> </dependency> <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>3.0</version> </dependency> </dependencies>
Это добавляет в dropwizard рамках, в Guice dropwizard расширения и Guice себя.
Добавление конфигурации
Это демо будет сделано, это взять сообщение из файла конфигурации yml и вставить его в качестве зависимости в ресурс .
Давайте теперь добавим класс конфигурации. Это будет класс конфигурации dropwizard, поэтому ему потребуется расширить класс io.dropwizard.Configuration . Добавьте поле сообщения с соответствующими получателями / установщиками, чтобы dropwizard мог получить сообщение для вставки в наш ресурс.
package com.github.codingricky;
import io.dropwizard.Configuration;
import org.hibernate.validator.constraints.NotEmpty;
public class ServerConfiguration extends Configuration {
@NotEmpty
private String message;
public String getMessage() {
return message;
}
}
Теперь создайте config.yml и добавьте в него это свойство сообщения. Поместите это в корневой каталог проекта, на том же уровне, что и файл pom.xml .
message: "Bonjour"
Добавление ресурса
Ресурс в dropwizard говорят представляет REST ресурс. Это обработчик HTTP-запроса. Мы создадим тот, который отвечает на путь / привет, и он выведет наше сообщение из файла config.yml . Это где Guice будет участвовать. Создайте этот класс в src / main / java .
package com.github.codingricky;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/hello")
public class HelloResource {
private final String message;
@Inject
public HelloResource(@Named("message") String message) {
this.message = message;
}
@GET
public String hello() {
return message;
}
}
Теперь этот класс ожидает, что Guice внедрит свойство @Named с именем message .
Теперь модуль Guice
Теперь нам нужно немного связующего кода, который берет сообщение из файла конфигурации, чтобы сделать его доступным для Guice . Создайте модуль ServerModule, который реализует модуль com.google.inject.Module .
package com.github.codingricky;
import com.google.inject.Binder;
import com.google.inject.Module;
import com.google.inject.Provides;
import javax.inject.Named;
public class ServerModule implements Module {
@Override
public void configure(Binder binder) {
}
@Provides
@Named("message")
public String provideMessage(ServerConfiguration serverConfiguration) {
return serverConfiguration.getMessage();
}
}
Обратите особое внимание , что в provideMessage , который извлекает сообщение из ServerConfiguration .
Наконец приложение
Теперь нам нужно связать все вместе. Класс приложения запустит приложение, а также создаст пакет Guice, который инкапсулирует ServerModule и ServerConfiguration .
package com.github.codingricky;
import com.hubspot.dropwizard.guice.GuiceBundle;
import io.dropwizard.Application;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
public class ServerApplication extends Application<ServerConfiguration> {
@Override
public void initialize(Bootstrap<ServerConfiguration> bootstrap) {
GuiceBundle<ServerConfiguration> guiceBundle = GuiceBundle.<ServerConfiguration>newBuilder()
.addModule(new ServerModule())
.setConfigClass(ServerConfiguration.class)
.enableAutoConfig(getClass().getPackage().getName())
.build();
bootstrap.addBundle(guiceBundle);
}
@Override
public void run(ServerConfiguration configuration, Environment environment) throws Exception {
}
public static void main(String[] args) throws Exception {
new ServerApplication().run(args);
}
}
Погнали!
Последний шаг — собрать все вещи и запустить их.
Поэтому добавьте в плагин сведения, которые упакуют приложение и позволят запустить его из командной строки.
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.6</version> <configuration> <createDependencyReducedPom>true</createDependencyReducedPom> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.github.codingricky.ServerApplication</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins>
Теперь мы можем построить все через Maven.
$ mvn clean install
Наконец мы можем запустить приложение
$ java -jar target/DropWizardGuice-1.0-SNAPSHOT.jar server config.yml
Если приложение запускается правильно, вы сможете зайти в браузер и нажать на ссылку, http: // localhost: 8080 / hello
Резюме
Спасибо за чтение, надеюсь, эта статья была вам полезна. Вот некоторые ссылки, которые были использованы в этой статье.

