[JAVA] Einführung in Ratpack (7) - Guice & Spring

Ratpack Einführungsserie

  1. Einführung in Ratpack (1) - Was ist Ratpack
  2. Einführung in Ratpack (2) --Architecture
  3. Einführung in Ratpack (3) - Hallo Welt, ausführliche Erklärung
  4. Einführung in Ratpack (4) - Routing & statischer Inhalt
  5. Einführung in Ratpack (5) --Json & Registry
  6. Einführung in Ratpack (6) --Promise
  7. Einführung in Ratpack (7) - Guice & Spring
  8. Einführung in Ratpack (8) - Sitzung
  9. Einführung in Ratpack (9) - Thymeleaf

DI-Behälter

Ratpack wie ich zuvor geschrieben habe Durch die Registrierung verschiedener Teile in der Klasse "Registry" wird eine modulare Architektur realisiert. Es ist an sich ideal und flexibel, aber ich denke, für eine groß angelegte Entwicklung wird immer noch ein vollwertiger DI-Container erforderlich sein. Ratpack kann die DI-Funktion von Google Guice oder Spring als "Registrierung" verwenden.

Guice

Sie können eine "Registrierung" aus der "ratpack.guice.Guice" -Klasse erstellen. Bitte beachten Sie, dass der Name "com.google.inject.Guice" lautet. Dies ist ein Beispiel für das Erstellen einer Registrierung aus der Klasse "Injector".

Injector injector = Guice.createInjector( new CustomModule() );
Registry registry = ratpack.guice.Guice.registry( injector );

Sie können Module auch nur über die API in Ratpack erstellen. Der Typ ist "Function <Registry, Registry>", aber Sie können ihn direkt an "RatpackServerSpec.registry ()" übergeben.

Function<Registry, Registry> registry = ratpack.guice.Guice.registry( bindings -> {
    bindings.module( CustomModule.class );
} );

Es ist zu beachten, dass das Hinzufügen von Modulen in der richtigen Reihenfolge betroffen ist. Der Inhalt wird in dem später hinzugefügten Modul überschrieben.

Die Verwendung entspricht der normalen Registrierung. Sie können die Klasse in Guices Injektor über die Registrierungs-API registrieren lassen. Wenn Sie einen Handler usw. anhand des Klassennamens angeben, wird dieser aus dem Container abgerufen. Da die Instanz von Guice verwaltet wird, können Sie die Abhängigkeit wie bei normalem Guice-Code mit "@ Inject" angeben.

public final class CustomHandler implements Handler {

    private Database database;

    @Inject
    public CustomHandler( Database database ) {
        this.database = database;
    }

    @Override
    public void handle( Context ctx ) throws Exception {
        ctx.render( "CustomHandler: " + database.find() );
    }
}
Action<Chain> handlers = chain -> {
    chain.all( CustomHandler.class );
};

InjectionHandler

Ratpack bietet die InjectionHandler-Klasse, um die Kesselplatten von Guice zu reduzieren.

public static final class CustomInjectionHandler extends InjectionHandler {
    public void handle( Context context, Database database ) {
        context.render( "CustomInjectionHandler: " + database.find() );
    }
}

Die Klasse, die "InjectionHandler" erbt, heißt "Handler" und implementiert nur eine Funktion mit "Context" als erstem Argument. Beschreiben Sie nach "Kontext" die Abhängigkeit, die Sie als Argument einfügen möchten. Intern erfolgt die Delegierung der Verarbeitung an die Methode durch Reflexion als Antwort auf den Handleraufruf. In Anbetracht der Leistung und der IDE-Unterstützung ziehe ich es persönlich vor, sie nicht häufig zu verwenden.

Spring

Sie können eine Registrierung aus einem Spring DI-Container mit der Methode ratpack.spring.Spring.spring () erstellen.

Registry registry = Spring.spring( Application.class );

Die im Argument angegebene Klasse ist die Klasse mit der Annotation @ SpringBootApplication. Wie in einer normalen Spring-Anwendung werden die Komponenten im Klassenpfad durchsucht und diese Klassen können aus der Registrierung abgerufen werden.

@Service
public class CustomRenderer implements Handler {

    private final CustomRepository repository;

    @Autowired
    public CustomRenderer( CustomRepository repository ) {
        this.repository = repository;
    }

    @Override
    public void handle( Context ctx ) throws Exception {
        ctx.render( "Hello from Spring Boot!" );
    }
}
@Repository
public static class CustomRepository {
    public String find() {
        return "This is the mock database.";
    }
}
Action<Chain> handlers = chain -> {
    chain.all( CustomRenderer.class );
};

Zusammenfassung

Ich denke, die Verwendung von DI-Containern ist im Java-Ökosystem fast obligatorisch. Ratpack bietet Unterstützung für zwei der beliebtesten DI-Container, Guice und Spring. Guice wird auch verwendet, um jede Ratpack-Erweiterung zu integrieren.

Ratpack und Guice sind eng miteinander verbunden, und DI selbst ist eine leistungsstarke Möglichkeit, Anwendungen lose zu koppeln. Wir empfehlen, dass Sie es positiv verwenden.

Recommended Posts

Einführung in Ratpack (7) - Guice & Spring
Einführung in Ratpack (8) -Session
Einführung in Ratpack (6) --Promise
Einführung in Ratpack (9) - Thymeleaf
Einführung in Ratpack (2) -Architektur
Einführung in Ratpack (5) --Json & Registry
Einführung in Spring Boot ~ ~ DI ~
Einführung in Spring Boot ② ~ AOP ~
Einführung in Spring Boot Teil 1
Einführung in Ratpack (1) - Was ist Ratpack?
Einführung in Ruby 2
[Einführung in Spring Boot] Überprüfung der Formularvalidierung
Spring Fox ① Einführung
Einführung in Ratpack (Extra Edition) - Mit Sentry
Einführung in web3j
Einführung in Micronaut 1 ~ Einführung ~
[Java] Einführung in Java
Einführung in die Migration
Einführung in Ratpack (3) - Hallo Welt, detaillierte Erklärung
Einführung in Java
Einführung in Doma
Einführung in Ratpack (Extra Edition) - Ratpack in Kotlin geschrieben
Einführung in Spring Boot + In-Memory Data Grid
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Einführung in JAR-Dateien
Einführung in die Bitarithmetik
Einführung in PlayFramework 2.7 ① Übersicht
Einführung in das Android-Layout
Einführung in Entwurfsmuster (Einführung)
Einführung in die praktische Programmierung
Einführung in den Befehl javadoc
Einführung in den Befehl jar
Einführung in den Lambda-Stil
Einführung in den Java-Befehl
Einführung in die Keycloak-Entwicklung
Einführung in den Befehl javac
[Einführung in Spring Boot] Senden Sie ein Formular mit thymeleaf
Einführung in Entwurfsmuster (Builder)
Versuchen Sie Spring Boot von 0 bis 100.
Einführung in die Android App-Entwicklung
Einführung in Metabase ~ Umgebungskonstruktion ~
(Punktinstallation) Einführung in Java8_Impression
Einführung in Entwurfsmuster (Composite)
Einführung in Micronaut 2 ~ Unit Test ~
Einführung in JUnit (Studiennotiz)
Einführung in Designmuster (Fliegengewicht)
[Java] Einführung in den Lambda-Ausdruck
Einführung in Apache Beam (2) ~ ParDo ~
Einführung in die EHRbase 2-REST-API
Einführung in Entwurfsmuster Prototyp
[Java] Einführung in die Stream-API
Einführung in Entwurfsmuster (Iterator)