Saltar al contenido

¿Qué es un módulo abierto en Java 9 y cómo usarlo?

Esta es el arreglo más válida que te podemos compartir, pero estúdiala pausadamente y valora si es compatible a tu proyecto.

Solución:

Para proporcionar acceso reflexivo a su módulo, Java 9 introdujo el abierto palabra clave.

Puede crear un módulo abierto utilizando el abierto palabra clave en la declaración del módulo.

Un abierto El módulo otorga acceso reflexivo a todos sus paquetes a otros módulos.

Por ejemplo, si desea usar algún marco que dependa en gran medida de la reflexión, como Spring, Hibernate, etc., puede usar esta palabra clave para habilitar el acceso reflexivo.

Puede habilitar el acceso reflexivo para paquetes específicos de su módulo usando el abre declaración en la declaración del paquete:

module foo 
    opens com.example.bar;

o usando el abierto palabra clave en la declaración del módulo:

open module foo 

pero ten en cuenta que no puedes combinarlos:

open module foo 
    opens com.example.bar;

resultados con error en tiempo de compilación.

Espero eso ayude.

Un poco de información sobre las directivas en cuestión. El Sistema de Módulos establece en el Rompiendo la encapsulación sección

A veces es necesario violar la control de acceso límites definidos por el sistema del módulo, y aplicados por el compilador y la máquina virtual, para permitir que un módulo acceda a algunos de los tipos no exportados de otro módulo. Esto puede ser deseable para, por ejemplo, habilitar pruebas de caja blanca de tipos internos, o para exponer las API internas no admitidas al código que ha llegado a depender de ellas. los
--add-exports se puede utilizar la opción, en tiempo de compilación y tiempo de ejecuciónpara hacer esto.

La opción de línea de comando es equivalente a, por ejemplo: –

module java.logging 
    exports java.util.logging;

los --add-exports La opción permite el acceso a los tipos públicos de un paquete específico.


Aunque después,

A veces es necesario ir más allá y habilitar el acceso a todos los elementos no públicos a través del método setAccessible de la API de reflexión central. los --add-opens Se puede usar la opción, en tiempo de ejecuciónpara hacer esto.

Esta opción de línea de comando es equivalente a, por ejemplo: –

module jdk.unsupported  
   opens sun.misc; 


Un módulo ordinario con nombre, por el contrario, se define explícitamente con una declaración de módulo como:

module foo  

y estos son conocidos como módulos explícitos. Los módulos explícitos pueden usar directivas en paquetes como se indicó anteriormente, por ejemplo, para export/open paquetes para proporcionar acceso reflexivo a sus respectivos miembros públicos y clases.


Por otro lado, un OPEN el modulo es un

módulo que no declara ningún paquete abierto pero el módulo resultante es
tratados como si todos los paquetes estuvieran abiertos.

De modo que otorga acceso en tiempo de ejecución a los tipos en todos los paquetes del módulo como si todos los paquetes se exportaran, lo que significa que el código de bytes o la reflexión se pueden usar para acceder a las clases o miembros de cada paquete en todos los paquetes. Las API de reflexión con setAccessible o MethodHandles.privateLookupIn tener en cuenta reflexión profundaasí que en resumen puede reflexionar sobre todos los miembros de todas las clases en todos los paquetes. Lo que también explica en gran medida la razón por la cual el compilador no permitirá ambas directivas abiertas en un paquete mientras el módulo ya está abierto.

Comentarios y puntuaciones del post

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *