Prefacio
A partir de ahora, la versión JDK se ha actualizado a 10. Aunque el ciclo de vida de Java9 es solo medio año, creo que los cambios traídos por esta versión son indelebles. Es la primera innovación profundamente arraigada en arquitectura y dependencia. Aprendamos más a continuación.
Las funciones modulares tienen varios propósitos:
1. Construcción del proyecto modular
De hecho, la modularización en sí no es difícil de entender. Utilizamos Maven o Gradle para construir proyectos con demasiados módulos. Entonces todavía podemos construir nuestro proyecto de proyecto modular en Java9. Como se muestra en la figura:
Presta atención a los siguientes puntos:
1. Cree un archivo de descripción modular llamado módulo-info.java en cada módulo
2. Configure las dependencias del módulo en la idea. Aquí, si nuestro módulo Project.Portal depende del módulo de servicio.
Encuentre este icono de opción: y configure así para agregar dependencias:
Si necesita establecer dependencias para otros proyectos, configúalas de esta manera.
2. Pasos de implementación
2.1. Estudiante. Módulo de servicio
2.1.1. Escribir módulo-info.java de servicio de estudiantes
Código de muestra:
import com.bdqn.lyrk.student.service.secondstudentservice; import com.bdqn.lyrk.student.service.api.istudentservice;/** * clase de descripción modular, unificada en el directorio raíz del archivo fuente de cada módulo es: módulo-Info.Java * Structuras comunes sintaxes en modularidad: * * * IMPORT. * .... * * [Open] Nombre del módulo del módulo { * requiere [estático | transitivo] nombre del módulo; * Exporta el nombre del paquete [al nombre del módulo] * Nombre de la interfaz de los proveedores con [clase de implementación de interfaz, ....] * usa el nombre de la interfaz * *} ** @author chen.nie * @date 2018/4/18 **/módulo student.service {exports com.bdqn.lyrk.student.service.api; Proporcionar IstudentService con Second StudentService;}2.1.2. Definir la interfaz
paquete com.bdqn.lyrk.student.service.api; interfaz pública istudentService {void study ();}2.1.3. Definir clases de implementación
paquete com.bdqn.lyrk.student.service; import com.bdqn.lyrk.student.service.api.istudentservice; public class Second StudentService implementa IstudentService {@Override public void Study () {System.out.println ("Segundo estudio"); }}2.2. Proyecto. Módulo portal
2.2.1. Escribir módulo-info.java
import com.bdqn.lyrk.student.service.api.istudentservice; módulo proyecto.portal {usa istudentService; requiere estudiante transitivo. Servicio;}2.2.2. Escribir el método principal
paquete com.bdqn.lyrk.portal; import com.bdqn.lyrk.student.service.api.istudentservice; import java.util.serviceloader; public class Main {public static void main (String [] ServiceLoader <stududentService> Studentservices = Serviceloader.Load (ISTURS) Studentservices.findfirst (). get (). Study (); }}Después de ejecutar, podemos obtener los resultados correspondientes:
3. Configuraciones comunes de los archivos de módulo-Info.java
3.1. Sobre las palabras clave abiertas
Abierto: si esta palabra clave se carga en el módulo, la visibilidad de la clase en el paquete de exportación a través de las exportaciones es la más alta. Podemos crear objetos y propiedades de acceso a través de la reflexión.
3.2. Acerca de las palabras clave de exportación
Después de definir el módulo, podemos especificar a qué paquetes bajo el módulo se puede acceder por otros módulos, y la palabra clave de exportación juega este papel. También podemos cooperar para especificar qué módulos pueden acceder al contenido del paquete
Sintaxis exporta el nombre del paquete [a] Nombre del módulo
Exports <Acupcide>; Exports <Appacy> a <Module1>, <Module2> ...;;
3.3. Palabra clave abre
Se abre es similar a Open. Si la palabra clave Open se agrega al módulo, los paquetes de exportación exportados de forma predeterminada en el módulo están en forma de Open.
módulo n {exportaciones com.jdojo.claim.model; abre com.jdojo.claim.model;}3.4. Requiere palabras clave
Esta palabra clave declara la dependencia entre el módulo actual y otro módulo. Un poco similar a las dependencias en Maven.
Requerir <MODULE>; Requiere transitivo <module>; requiere estático <module>; requiere estático transitivo <module>; requiere static transitivo <module>;
También se pueden agregar modificadores estáticos para requerir declaraciones, lo que significa que la dependencia es obligatoria en el momento de la compilación, pero opcional en tiempo de ejecución. El modificador transitivo en la declaración Requerir causará dependencias implícitas para otros módulos que dependen del módulo actual. Consulte la siguiente figura:
Aquí podemos echar un vistazo al archivo del módulo-Info.class en el módulo Java.se:
/ * * Copyright (c) 2014, Oracle y/o sus afiliados. Reservados todos los derechos. * Oracle Propietario/Confidencial. El uso está sujeto a los términos de la licencia. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // ** * Define el núcleo java se api. * <p> * Los módulos que definen las API Corba y Java EE no son requeridas por * este módulo, pero son requeridos por el módulo * <a href = "java.se.ee-summary.html"> {@code java.se.ee} </a>. * * <dl> * <dt style = "font-family: 'DeJavu sans', Arial, Helveta, Sans Serif"> Opcional para la plataforma Java SE: </dt> * <dd> * <a href = "../ specs/jni/index.html"> Java Interface (jni) </a> <ABR> * <ABR> * <ABR> href = "../ specs/jvmti.html"> Java Virtual Machine Tool Interface (jvm ti) </a> <br> * <a href = "../ especs/jdwp/jdwp-spec.html"> java debug wire protocol (jdwp) </a> <br> * </dd> * </dltule * @since 9 */módulo java.se {requiere java.compiler transitivo; requiere java.datatransfer transitivo; requiere java.desktop transitivo; requiere java.instrument transitivo; Requiere Java.logging transitivo; requiere java transitivo. Management; requiere java.management.rmi transitivo; requiere java transitivo. requiere java.prefs transitivos; requiere java.rmi transitivo; Requiere Java.scripting transitivo; requiere java.security.jgss transitivo; requiere java.security.sasl transitivo; requiere java.sql transitivo; requiere java.sql.rowset transitivo; requiere java.xml transitivo; requiere java.xml.crypto transitivo;}En este momento, solo necesitamos java.se, e indirectamente introduciremos todas las dependencias bajo este módulo
3.5. Usos y palabras clave del proveedor
Java permite el uso de mecanismos de proveedores de servicios que separan a los proveedores de servicios y a los usuarios de servicios. JDK 9 permite implementar sus servicios utilizando declaraciones y proporcionar declaraciones. Use declaraciones para especificar el nombre de la interfaz de servicio, y el módulo actual lo encontrará y lo cargará usando la clase java.util.serviceloader. Consulte el ejemplo anterior para el código. Nota: Las clases proporcionadas por el proveedor deben estar bajo el mismo módulo, y la implementación de otros módulos no se puede hacer referencia en la actualidad. Por ejemplo: el servicio de estudiantes solo puede existir bajo el módulo de servicio estudiantil, y no se permite la implementación de la interfaz del proveedor de módulos de servicio.
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.