Java Academy · leksjon

requires og exports

Styr avhengigheter og synlighet

Leksjon 2 av 413 trinn

requires og exports er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Styring av modulgrafen

To direktiver former modulgrafen: requires deklarerer hva modulen er avhengig av, og exports deklarerer hva den avslører.

I denne leksjonen utforskes variantene deres og reglene for lesetilgang og tilgjengelighet som de oppretter.

Vanlig requires

En enkel requires X; betyr at «denne modulen leser modul X». Koden kan bruke de eksporterte offentlige typene fra X, men konsumentene av Deres modul får ingen informasjon om X.

module com.example.app {
    requires java.sql;
}

requires transitive

requires transitive Y; betyr at alle moduler som leser Deres modul, også leser Y. Dette er implisitt lesetilgang, og er nyttig når API-et Deres eksponerer typer fra Y.

module com.example.api {
    requires transitive java.sql;
}

Når transitive bør brukes

Bruk transitive når en metode i det eksporterte API-et Deres returnerer eller mottar en type fra en annen modul. Ellers kan ikke kallere engang angi returtypen uten en egen requires.

Dette sparer konsumentene for å deklarere overflødige avhengigheter.

requires static

requires static Z; deklarerer en avhengighet som gjelder bare ved kompilering. Modulen trengs for å kompilere, men er valgfri under kjøring. Dette passer godt for annotasjonsprosessorer eller valgfrie integrasjoner.

module com.example.app {
    requires static com.example.annotations;
}

Vanlig exports

exports pkg; gjør de offentlige typene i pkg lesbare for alle moduler som krever Deres modul.

module com.example.lib {
    exports com.example.lib.api;
}

Kvalifisert exports

En kvalifisert eksport avslører en pakke bare for bestemte navngitte moduler ved hjelp av exports pkg to modA, modB;. Dette er nyttig for vennemoduler i et større system.

module com.example.core {
    exports com.example.core.internal to com.example.web, com.example.batch;
}

opens for refleksjon

exports gir tilgang til offentlige medlemmer både ved kompilering og under kjøring. Dyp refleksjon (private felt) krever i stedet opens pkg;, slik rammeverk som Jackson og Hibernate bruker.

module com.example.model {
    exports com.example.model;
    opens com.example.model.entities to com.fasterxml.jackson.databind;
}

open Modules

Hvis en hel modul trenger tilgang via refleksjon, noe som er vanlig for eldre rammeverk, deklareres den som open. Da åpnes alle pakkene for refleksjon, mens vanlig exports fortsatt styrer tilgangen ved kompilering.

open module com.example.beans {
    requires java.logging;
}

Lesetilgang kontra tilgjengelighet

To betingelser må begge være oppfylt for å bruke en type fra en annen modul:

  • Lesetilgang: Deres modul har requires på den andre modulen
  • Tilgjengelighet: Den andre modulen eksporterer pakken, og typen er offentlig

Hvis én av dem mangler, avviser kompilatoren koden.

Satt sammen

En korrekt utformet modul som eksporterer JDBC-typer videre og åpner entiteter for et JSON-bibliotek:

module com.example.service {
    requires transitive java.sql;
    requires static com.example.annotations;

    exports com.example.service.api;
    exports com.example.service.spi to com.example.plugins;
    opens com.example.service.dto to com.fasterxml.jackson.databind;
}

Hurtigsjekk

Velg direktivet for API-typer som eksponeres videre.

Oppsummering

Dette har De lært om direktivene for avhengigheter og synlighet:

  • requires, requires transitive, requires static
  • exports og kvalifisert exports ... to
  • opens og open module for refleksjon
  • Bruk krever både lesetilgang og tilgjengelighet

Neste tema: frikobling med tjenester ved hjelp av provides og uses.

Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «requires og exports» gratis?

Ja – hele teksten i «requires og exports» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «requires og exports»?

Styr avhengigheter og synlighet Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «requires og exports»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. module-info.java
  2. requires og exports
  3. Tjenester med provides/uses
  4. Migrere til moduler
← Tilbake til Java Academy