requires en exports
Afhankelijkheden en zichtbaarheid beheren
requires en exports is een gratis Java Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.
De modulegrafiek beheren
Twee richtlijnen bepalen de modulegrafiek: requires declareert waarvan je afhankelijk bent en exports declareert wat je beschikbaar stelt.
In deze les ontdek je hun varianten en de regels voor leesbaarheid en toegankelijkheid die ze instellen.
Gewone requires
Een eenvoudige requires X; betekent: "deze module X leest". Je code kan de geëxporteerde openbare typen van X gebruiken, maar afnemers van jouw module krijgen niets over X te weten.
module com.example.app {
requires java.sql;
}requires transitive
requires transitive Y; betekent dat elke module die jouw module leest, ook Y leest. Dit is impliciete leesbaarheid, wat handig is wanneer je API typen van Y beschikbaar stelt.
module com.example.api {
requires transitive java.sql;
}Wanneer je transitive gebruikt
Gebruik transitive wanneer een methode in je geëxporteerde API een type uit een andere module retourneert of accepteert. Anders zouden aanroepers het retourtype niet eens kunnen benoemen zonder hun eigen requires.
Zo hoeven afnemers geen overbodige afhankelijkheden te declareren.
requires static
requires static Z; declareert een afhankelijkheid die alleen tijdens compilatie nodig is. De module is nodig om te compileren, maar is optioneel tijdens de uitvoering. Dat is ideaal voor annotatieverwerkers of optionele integraties.
module com.example.app {
requires static com.example.annotations;
}Gewone exports
exports pkg; maakt de openbare typen van pkg leesbaar voor alle modules die van jouw module afhankelijk zijn.
module com.example.lib {
exports com.example.lib.api;
}Gekwalificeerde exports
Een gekwalificeerde export stelt een pakket alleen beschikbaar aan specifieke modules met een genoemde naam, met exports pkg to modA, modB;. Dat is nuttig voor bevriende modules binnen een groter systeem.
module com.example.core {
exports com.example.core.internal to com.example.web, com.example.batch;
}opens voor reflectie
exports geeft tijdens compilatie en uitvoering toegang tot openbare leden. Voor diepe reflectie, zoals toegang tot privévelden, is in plaats daarvan opens pkg; nodig. Dat wordt gebruikt door raamwerken zoals Jackson of Hibernate.
module com.example.model {
exports com.example.model;
opens com.example.model.entities to com.fasterxml.jackson.databind;
}open modules
Als een volledige module reflectieve toegang nodig heeft, wat vaak voorkomt bij oudere raamwerken, declareer je deze als open. Elk pakket staat dan open voor reflectie, hoewel gewone exports nog steeds de toegang tijdens compilatie bepalen.
open module com.example.beans {
requires java.logging;
}Leesbaarheid versus toegankelijkheid
Er moet aan beide voorwaarden zijn voldaan om het type van een andere module te gebruiken:
- Leesbaarheid: jouw module heeft een
requiresvoor die module - Toegankelijkheid: die module exporteert het pakket en het type is openbaar
Als een van beide ontbreekt, weigert de compiler je code.
Alles samenbrengen
Een goed gevormde module die JDBC-typen opnieuw beschikbaar stelt en entiteiten opent voor een JSON-bibliotheek:
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;
}Korte controle
Kies de richtlijn voor opnieuw beschikbaar gemaakte API-typen.
Samenvatting
Je hebt de richtlijnen voor afhankelijkheden en zichtbaarheid geleerd:
requires,requires transitive,requires staticexportsen gekwalificeerdeexports ... toopensenopen modulevoor reflectie- Gebruik vereist zowel leesbaarheid als toegankelijkheid
Volgende: ontkoppeling met services via provides en uses.
Leer Java met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 104
- Lessen
- 374
Veelgestelde vragen
Is de les “requires en exports” gratis?
Ja — de volledige tekst van “requires en exports” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.
Wat leer ik in “requires en exports”?
Afhankelijkheden en zichtbaarheid beheren Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Java Academy te beginnen?
Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “requires en exports”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Java Academy?
Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- module-info.java
- requires en exports
- Services met provides/uses
- Migreren naar modules