[JAVA] Introduction à Ratpack (7) --Guice & Spring

Série d'introduction Ratpack

  1. Introduction à Ratpack (1) --Qu'est-ce que Ratpack
  2. Introduction à Ratpack (2) --Architecture
  3. Introduction à Ratpack (3) - Explication détaillée de Hello world
  4. Introduction à Ratpack (4) --Routage et contenu statique
  5. Introduction à Ratpack (5) --Json & Registry
  6. Introduction à Ratpack (6) - Promesse
  7. Introduction à Ratpack (7) --Guice & Spring
  8. Introduction à Ratpack (8) - Session
  9. Introduction à Ratpack (9) --Thymeleaf

Conteneur DI

Ratpack comme je l'ai déjà écrit En enregistrant diverses parties dans la classe «Registry», une architecture modulaire est réalisée. C'est idéal et flexible en soi, mais je pense que le développement à grande échelle nécessitera toujours un conteneur DI à part entière. Ratpack peut utiliser la fonction DI de Google Guice ou Spring comme Registry.

Guice

Vous pouvez créer un Registry à partir de la classe ratpack.guice.Guice. Veuillez noter que le nom est «com.google.inject.Guice». Ceci est un exemple de création d'un Registry à partir de la classe ʻInjector`.

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

Vous pouvez également créer des modules uniquement à partir de l'API dans Ratpack. Le type est Function <Registry, Registry>, mais vous pouvez le passer directement à RatpackServerSpec.registry ().

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

Il est à noter que l'ajout de modules est affecté dans l'ordre. Le contenu sera écrasé dans le module ajouté ultérieurement.

L'utilisation est la même que celle du Registry normal. Vous pouvez enregistrer la classe dans l'injecteur de Guice depuis l'API Registry. Si vous spécifiez un gestionnaire, etc. par le nom de la classe, il sera extrait du conteneur. Puisque l'instance est gérée par Guice, vous pouvez spécifier la dépendance avec @ Inject comme le code Guice normal.

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 fournit la classe ʻInjectionHandler` pour réduire les plaques chauffantes de Guice.

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

La classe qui hérite de ʻInjectionHandler implémente une seule fonction avec le nom handleretContextcomme premier argument. AprèsContext`, décrivez la dépendance que vous souhaitez injecter en tant qu'argument. En interne, cela prend la forme d'une délégation de traitement à la méthode par réflexion en réponse à l'appel du gestionnaire. Compte tenu des performances et du support IDE, je préfère personnellement ne pas l'utiliser beaucoup.

Spring

Vous pouvez créer un Registry à partir d'un conteneur Spring DI avec la méthode ratpack.spring.Spring.spring ().

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

La classe spécifiée dans l'argument est la classe avec l'annotation @ SpringBootApplication. Comme vous le feriez dans une application Spring normale, les composants sont recherchés dans le chemin des classes et ces classes peuvent être récupérées à partir de Registry.

@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 );
};

Résumé

Je pense que l'utilisation de conteneurs DI est presque obligatoire dans l'écosystème Java. Ratpack prend en charge deux des conteneurs DI les plus populaires, Guice et Spring. Guice est également utilisé pour intégrer chaque extension Ratpack.

Ratpack et Guice sont étroitement intégrés et la DI elle-même est un moyen puissant de coupler les applications de manière lâche. Nous vous recommandons de l'utiliser de manière positive.

Recommended Posts

Introduction à Ratpack (7) --Guice & Spring
Introduction à Ratpack (8) - Session
Introduction à Ratpack (6) - Promesse
Introduction à Ratpack (9) --Thymeleaf
Introduction à Ratpack (2) -Architecture
Introduction à Ratpack (5) --Json & Registry
Introduction à Spring Boot ① ~ DI ~
Introduction à Spring Boot ② ~ AOP ~
Introduction à Spring Boot, partie 1
Introduction à Ratpack (1) - Qu'est-ce que Ratpack?
Introduction à Ruby 2
[Introduction à Spring Boot] Vérification de la validation du formulaire
Spring Fox ① Introduction
Introduction à Ratpack (Extra Edition) - Utilisation de Sentry
Introduction à web3j
Introduction à Micronaut 1 ~ Introduction ~
[Java] Introduction à Java
Introduction à la migration
Introduction à Ratpack (3) - Explication détaillée de Hello World
Introduction à Java
Introduction à Doma
Introduction à Ratpack (Extra Edition) --Ratpack écrit en Kotlin
Introduction à Spring Boot + In-Memory Data Grid
[Introduction à Spring Boot] Fonction d'authentification avec Spring Security
Introduction aux fichiers JAR
Introduction à l'arithmétique des bits
Introduction à PlayFramework 2.7 ① Présentation
Introduction à la mise en page Android
Introduction aux modèles de conception (introduction)
Introduction à la programmation pratique
Introduction à la commande javadoc
Introduction à la commande jar
Introduction au style lambda
Introduction à la commande java
Introduction au développement de Keycloak
Introduction à la commande javac
[Introduction à Spring Boot] Soumettez un formulaire à l'aide de thymeleaf
Introduction aux modèles de conception (Builder)
Essayez Spring Boot de 0 à 100.
Introduction au développement d'applications Android
Introduction à la métabase ~ Construction de l'environnement ~
(Installation par points) Introduction à Java8_Impression
Introduction aux modèles de conception (composite)
Introduction à Micronaut 2 ~ Test unitaire ~
Introduction à JUnit (note d'étude)
Introduction aux modèles de conception (poids mouche)
[Java] Introduction à l'expression lambda
Introduction à Apache Beam (2) ~ ParDo ~
Introduction à l'API EHRbase 2-REST
Introduction au prototype de modèles de conception
[Java] Introduction à l'API Stream
Introduction aux modèles de conception (Iterator)