Reference
Java Modules & SPI (`pkg15modules`)
JPMS (Java Platform Module System)
Introduced in Java 9. Strong encapsulation: only exports packages are accessible to other modules.
module-info.java keywords
| Keyword | Meaning |
|---|---|
requires |
dependency on another module |
requires transitive |
re-export dependency to consumers |
exports |
public API package |
opens |
allow deep reflection (frameworks) |
provides / uses |
SPI registration / consumption |
Classpath vs module path
- Classpath (legacy): unnamed module, all jars visible.
- Module path: named modules, explicit dependencies.
1java --module-path mods --module com.myapp/com.myapp.MainServiceLoader (SPI)
Discover implementations at runtime without hard-coding classes.
- Define interface
Encoder - Implement
UpperEncoder,ReverseEncoder - Register in
META-INF/services/pkg15modules.spi.Encoder:1pkg15modules.spi.UpperEncoder2pkg15modules.spi.ReverseEncoder ServiceLoader.load(Encoder.class)returns all providers
Full demo: cd pkg15modules/spi-demo && mvn -q exec:java
Files
| File | Topic |
|---|---|
modules1JpmsConcepts |
JPMS vocabulary, module inspection |
modules2ServiceLoaderSpi |
SPI pattern (single-file + notes) |
spi-demo/ |
real META-INF/services demo |