requires und exports
Abhängigkeiten und Sichtbarkeit steuern
requires und exports ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Den Modulgraphen steuern
Zwei Direktiven bestimmen den Modulgraphen: requires deklariert, wovon Ihr Modul abhängt, und exports deklariert, was es offenlegt.
In dieser Lektion untersuchen Sie ihre Varianten sowie die Regeln für Lesbarkeit und Zugänglichkeit, die dadurch entstehen.
Einfaches requires
Ein einfaches requires X; bedeutet: „Dieses Modul liest Modul X.“ Ihr Code kann die exportierten öffentlichen Typen von X verwenden, aber die Consumer Ihres Moduls erfahren nichts über X.
module com.example.app {
requires java.sql;
}requires transitive
requires transitive Y; bedeutet: Jedes Modul, das Ihr Modul liest, liest auch Y. Dies ist eine implizite Lesbarkeit und nützlich, wenn Ihre API die Typen von Y offenlegt.
module com.example.api {
requires transitive java.sql;
}Wann Sie transitive verwenden
Verwenden Sie transitive, wenn eine Methode Ihrer exportierten API einen Typ aus einem anderen Modul zurückgibt oder als Parameter entgegennimmt. Andernfalls könnten Aufrufer den Rückgabetyp nicht einmal benennen, ohne selbst ein requires zu deklarieren.
So müssen Consumer keine redundanten Abhängigkeiten deklarieren.
requires static
requires static Z; deklariert eine Abhängigkeit nur zur Kompilierungszeit. Das Modul wird zum Kompilieren benötigt, ist aber zur Laufzeit optional – ideal für Annotation-Processor oder optionale Integrationen.
module com.example.app {
requires static com.example.annotations;
}Einfaches exports
exports pkg; macht die öffentlichen Typen von pkg für alle Module lesbar, die Ihr Modul benötigen.
module com.example.lib {
exports com.example.lib.api;
}Qualifiziertes exports
Ein qualifiziertes exports stellt ein Paket nur bestimmten benannten Modulen mit exports pkg to modA, modB; bereit. Das ist für befreundete Module innerhalb eines größeren Systems nützlich.
module com.example.core {
exports com.example.core.internal to com.example.web, com.example.batch;
}opens für Reflexion
exports gewährt Zugriff auf öffentliche Member zur Compile- und Laufzeit. Tiefe Reflexion (private Felder) erfordert stattdessen opens pkg;, wie es Frameworks wie Jackson oder Hibernate verwenden.
module com.example.model {
exports com.example.model;
opens com.example.model.entities to com.fasterxml.jackson.databind;
}Offene Module
Wenn ein gesamtes Modul reflektiven Zugriff benötigt, wie es bei älteren Frameworks häufig vorkommt, deklarieren Sie es als open. Dann ist jedes Paket für Reflexion geöffnet, während normale exports weiterhin den Zugriff zur Kompilierungszeit steuern.
open module com.example.beans {
requires java.logging;
}Lesbarkeit und Zugänglichkeit
Beide Bedingungen müssen erfüllt sein, damit Sie den Typ eines anderen Moduls verwenden können:
- Lesbarkeit: Ihr Modul deklariert
requiresfür das andere Modul - Zugänglichkeit: Das andere Modul exportiert das Paket und der Typ ist public
Fehlt eine der beiden Bedingungen, weist der Compiler Ihren Code zurück.
Alles zusammenführen
Ein wohlgeformtes Modul, das JDBC-Typen erneut bereitstellt und Entitäten für eine JSON-Bibliothek öffnet:
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;
}Kurze Überprüfung
Wählen Sie die Direktive für erneut bereitgestellte API-Typen.
Zusammenfassung
Sie haben die Direktiven für Abhängigkeiten und Sichtbarkeit gelernt:
requires,requires transitive,requires staticexportsund qualifiziertesexports ... toopensundopen modulefür Reflexion- Die Verwendung erfordert sowohl Lesbarkeit als auch Zugänglichkeit
Als Nächstes: Entkopplung mit Services mithilfe von provides und uses.
Häufig gestellte Fragen
Ist die Lektion „requires und exports“ kostenlos?
Ja — der vollständige Text von „requires und exports“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „requires und exports“?
Abhängigkeiten und Sichtbarkeit steuern Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „requires und exports“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- module-info.java
- requires und exports
- Dienste mit provides/uses
- Auf Module migrieren