Préface
À l'heure actuelle, la version JDK a été mise à jour à 10. Bien que le cycle de vie de Java9 ne soit que demi-année, je pense que les changements apportés par cette version sont indélébiles. Il s'agit de la première innovation profonde dans l'architecture et la dépendance. Apprenons plus ci-dessous.
Les fonctions modulaires ont plusieurs objectifs:
1. Construction du projet modulaire
En fait, la modularisation elle-même n'est pas difficile à comprendre. Nous avons utilisé Maven ou Gradle pour construire des projets avec trop de modules. Ensuite, nous pouvons toujours construire notre projet modulaire dans Java9. Comme indiqué sur la figure:
Faites attention aux points suivants:
1. Veuillez créer un fichier de description modulaire appelé module-info.java sous chaque module
2. Configurez les dépendances du module dans l'idée. Ici, si notre module Project.Portal dépend du module Student.Service, nous pouvons le définir comme ceci:
Trouvez cette icône d'option: et définissez-la comme celle-ci pour ajouter des dépendances:
Si vous devez définir des dépendances pour d'autres projets, veuillez les définir de cette manière.
2. Étapes de mise en œuvre
2.1. Module Student.Service
2.1.1. Écrivez le module-info.java de Studentservice
Exemple de code:
IMPORT COM.BDQN.LYRK.STUDENT.SERVICE.SECONDSTUDENTSERVICE; IMPORT COM.BDQN.LYRK.STUDENT.SERVICE.API.ISTUDENTSERVICE; / ** * Classe de description modulaire, Unified dans le répertoire racine du fichier source de chaque module est: Module-Info.java * STRUTURES COMMUNES STRUTURES DU MODULLINE: * * IMPORTXXXXXXX; * .... * * [Ouvrir le nom du module du module {* nécessite le nom du module [statique | transitif]; * Exports Nom du package [Nom du module] * Nom de l'interface des fournisseurs avec [classe d'implémentation d'interface, ....] * utilise le nom de l'interface * *} * ** @author chen.nie * @date 2018/4/18 ** / module Student.Service {exports com.bdqn.lyrk.student.service.api; Fournir des services de service avec SecondSudentsService;}2.1.2. Définir l'interface
package com.bdqn.lyrk.student.service.api; interface publique IstudentService {void Study ();}2.1.3. Définir les cours de mise en œuvre
package com.bdqn.lyrk.student.service; import com.bdqn.lyrk.student.service.api.istudentService; public class SecondStudentService implémente iStudentService {@Override public Void Study () {System.out.println ("deuxième étude"); }}2.2. Project.portal Module
2.2.1. Écrire module-info.java
import com.bdqn.lyrk.student.service.api.istudentService; module project.portal {utilise iStudentService; nécessite un étudiant transitif.Service;}2.2.2. Écrire la méthode principale
package com.bdqn.lyrk.portal; import com.bdqn.lyrk.student.service.api.istudentService; import java.util.serviceloader; public class main {public static void Main (string [] args) {ServiceLoader <StudentsServices); StudentServices.FindFirst (). Get (). Study (); }}Après l'exécution, nous pouvons obtenir les résultats correspondants:
3. Configurations communes de fichiers modules-fo.java
3.1. Sur les mots clés ouverts
Ouvert: si ce mot-clé est chargé sur le module, la visibilité de la classe sous le package d'exportation via les exportations est la plus élevée. Nous pouvons créer des objets et accéder aux propriétés par la réflexion.
3.2. À propos des exportations de mots clés
Après avoir défini le module, nous pouvons spécifier quels packages sous le module sont accessibles par d'autres modules, et le mot-clé Exports joue ce rôle. Nous pouvons également coopérer pour spécifier quels modules peuvent accéder au contenu du package
Nom du package d'exportation de syntaxe [vers] nom du module
Exports <Package>; Exports <Package> vers <Module1>, <Module2> ...;
3.3. Ouvre un mot-clé
Open est similaire à l'ouverture. Si le mot clé ouvert est ajouté au module, les packages d'exportations exportés par défaut dans le module sont sous forme d'Open.
module n {exportations com.jdojo.claim.model; ouvre com.jdojo.claim.model;}3.4. Nécessite des mots clés
Ce mot-clé déclare la dépendance entre le module actuel et un autre module. Un peu similaire aux dépendances dans Maven.
exiger <Sodule>; nécessite un <module transitif>; nécessite un <module statique>; nécessite un <module statique transitif;
Les modificateurs statiques peuvent également être ajoutés pour nécessiter des instructions, ce qui signifie que la dépendance est obligatoire au moment de la compilation, mais facultative au moment de l'exécution. Le modificateur transitif dans l'instruction OFFR provoquera des dépendances implicites pour d'autres modules dépendants du module actuel. Veuillez consulter le chiffre suivant:
Ici, nous pouvons jeter un œil au fichier module-info.class sous le module java.se:
/ * * Copyright (C) 2014, Oracle et / ou ses affiliés. Tous droits réservés. * Oracle propriétaire / confidentiel. L'utilisation est soumise aux conditions de licence. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // ** * Définit l'api Java SE Core. * <p> * Les modules définissant les API Corba et Java EE ne sont pas requis par * ce module, mais ils sont requis par le * <a href = "java.se.ee-supmary.html"> {@ code java.se.ee} </a> Module. * * <dl> * <dt style = "font-Family: 'Dejavu Sans', Arial, Helvetica, Sans Serif"> Facultatif pour la plate-forme Java SE: </dt> * <dd> * <A href = "../ specs / jni / index.html"> Java Interface (jni) </a> <br> * * A href="../specs/jvmti.html">Java Virtual Machine Tool Interface (JVM TI)</a><br> * <a href="../specs/jdwp/jdwp-spec.html">Java Debug Wire Protocol (JDWP)</a><br> * </dd> * </dl> * * @moduleGraph * @Since 9 * / module java.se {nécessite un java.compiller transitif; nécessite une Java.Datatransfer transitive; nécessite une Java.Desktop transitive; nécessite un instrument Java.instrument transitif; nécessite un java transitif. Logging; nécessite une gestion de Java.Mava transitive; nécessite une Java.management transitive.rmi; nécessite un java transitif.naming; nécessite une Java.Prefs transitive; nécessite une Java.rmi transitive; nécessite un Java.Scripting transitif; nécessite une Java.Security transitive.jgss; nécessite une Java.Security transitive.SASL; nécessite une Java.SQL transitive; Nécessite un Java.Sql.RowSet transitif; nécessite une Java.xml transitive; nécessite une Java.xml.crypto transitive;}Pour le moment, nous n'avons besoin que de java.se, et nous introduirons indirectement toutes les dépendances sous ce module
3.5. Utilisations et mots clés du fournisseur
Java permet d'utiliser des mécanismes de fournisseurs de services qui séparent les fournisseurs de services et les utilisateurs de services. JDK 9 permet de mettre en œuvre ses services à l'aide d'instructions et de fournir des instructions. Utilisez des instructions pour spécifier le nom de l'interface de service, et le module actuel le trouvera et le chargera à l'aide de la classe Java.util.ServiceLoader. Veuillez vous référer à l'exemple précédent du code. Remarque: Les classes fournies par le fournisseur doivent être sous le même module et la mise en œuvre d'autres modules ne peut pas être référencée actuellement. Par exemple: le StudentServiceImpl ne peut exister que sous le module Student.Service, et la mise en œuvre de l'interface du fournisseur de module Student.Service dans d'autres modules n'est pas autorisée.
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.