requires og exports
Styr avhengigheter og synlighet
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
requirespå 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 staticexportsog kvalifisertexports ... toopensogopen modulefor refleksjon- Bruk krever både lesetilgang og tilgjengelighet
Neste tema: frikobling med tjenester ved hjelp av provides og uses.
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
- module-info.java
- requires og exports
- Tjenester med provides/uses
- Migrere til moduler