Java ??? ?? ?? ????? (SPI)? ?? ?? ???? ??
Sep 21, 2025 am 03:50 AMJava SPI? JDK? ?? ??? ?? ?????? Serviceloader? ?? ????? ?? ?? ??? ?????. 1. ??? ?????? ???? Meta-Inf/Services/?? ?????? ?? ??? ?? ??? ???? ?? ???? ??? ? ??? ??????. 2. serviceloader.load ()? ???? ?? ???????? JVM? ???? ??? ?? ????????. 3. ????? ??? ?? ?? ?? ??? ?? ?? ? ?????? ???? ?? ??? ???????. 4. ?? ???? ?????? ?? ?? ?? ??? ? ???? ??? ?????. 5. ??, ??? ??, ?? ??, ??? ?? ? ?? ??????????. 6. Java 9??? ???? ??? ? ???? ... ??? ???? ?? ???? ?? ??? ?????. SPI? ???? ???? ???? ? ? ??? ??? ???? ???? ?? ???? ?? ? ????.
Java? SPI (Service Provider Interface) ????? ?? ??? ?? ????? ???? ? ??? ?????. ?? ?? ???? ?????? ?? ? ? ??? ? 3?? ?? ??? ???? ?? ?? ??? ?? ? ? ????. ? "????"????? ?????? ??????, ?? ??? ??, ??? ????? ? ?? ?????? ?? ?????. ?? ??, JDBC? ???? SPI ?? ?????.

SPI? ?? ????? ????? ?? ????? ? ???? ?? ?? ????? . ? ????? ?? ?? ????? ?? ?? ?? ? ??? ???? ?? ???? ???????? ??? ??? ??? ???? ? ? ????.
Java SPI? ??????
Java SPI? java.util.ServiceLoader
???? ??? JDK? ?? ??? ?? ???????. ?? ?? ???? ??? ????.

- ????? ?? ?? ????? (???)? ??????.
-
META-INF/services/
Directory?? ?????? ?? ????? ??? ????. - ?? ???? ?????? ?? ??? ?? ???? ? ? ? ??? ??? ?? ?????.
-
ServiceLoader
???? ??? ?????????.
?? ?? ?? ??? ?????? ?????.
?? ????? ?? { void log (??? ???); }
?? ?? ???? ?? META-INF/services/com.example.Logger
? ????.

com.example.impl.consolelogger com.example.impl.filelogger
???? ?? :
serviceloader <logger> ?? = serviceloader.load (logger.class); for (?? ?? : ??) { logger.log ( "hello, spi!"); }
JVM? ?? ??? ???? ?? ??? ?? ?? ???? ????????.
?? ??? ?? ????? ???? ??? ??????
?? ??? ???? ???? ?? SPI? ???? ??? ?? ?? ? ?? ??? ???? ? ???. ? ?? ???? ?? ??? ??? ????.
1. ??? ??? ?????? (????? ??)
?????? ?? ?? ?? ??? ???? ??? ?????????. ???? ????? ?? ?? ?? ?? ?? ???? ??? ???? ?? ??????.
?? ????? ??? ??? ??? { ??? [] Serialize (Object obj); <t> t deserialize (byte [] data, class <t> type); }
2. ?? ?? ?? ? ??? ??
ServiceLoader
?? ??? ????? ?? ????????. ??? ??? ?? ???? ?? ??? ?? ?? ?? ????? ?? ? ? ????.
?? ????? ??? ??? ??? { int getPriority (); // ?? ???? ????? (class <?> type); // ?? ??? ?????}
?? ?? ??? ??? :
DataSerializer selected = serviceloader.load (DataSerializer.class) .??() .map (??? :: get) .filter (s-> S.Supports (myData.class)) .MAX (??? .comparingInt (DataSerializer :: getPriority)) .ORELSETHROW (() -> NEW IRMEREGALSTATEEXCEPTION ( "SERIALIZER FIND"));
3. ?? ?? ? ??? ??? ?????
?? ?? (? : DefaultLogger
)? ?? ??? ????? ?? ??? ?? ?? ??? ?? ? ? ????. ?? ?? ???? ? 3 ? ?? ??? ????? ??? ? ????.
?? ?? ????? ?
???? 1 : ?? ?? ?? ???
?? ??? ???? SPI? ???? WeChat, Alipay, UnionPay ?? ?? ?? ??? ???????.
-
PaymentProcessor
?????? ?????? - ? ??? ??
.jar
??? ?META-INF/services
??? ?????. - ?? ?????
ServiceLoader
???? ?? ??? ?? ??? ????.
?? ??? ??? ?? ??? ???? ?? ??? ???? ?? ??? ???? ???????.
???? 2 : ???? ??? ?? ??
???? ??? ?? (??? ??, ??? ??, ID ?? ?)? ?? ?? ??? ???????. ? ?? ??? SPI? ?????.
?? ????? ??? ??? { ?? ?? (??? ??); ??? gettype (); // ?? ?? "???", "??" }
?? ???? ???? ???????? ????? ?????.
?? ? ?? ??
SPI? ???? ???? ??? ???? ? ??? ????.
?? ?? :
ServiceLoader
??? ???? ? ?? ??? ?? ?? ? ????. ?? ??? ?? ?? ?? ??? ???? ?? ??? ???? ?? ????.ClassPath ??? :
META-INF/services
??? JAR? ???? ?? ??? ???? ???????. Maven? ?? ?? ?????? ?? ?? ? ????.?? ?? : ?? ??? ??? ?? ??? ??? ??? ??????. ???? ?? ??? ???????.
for (?? ?? : ??) { ???? { logger.log ( "???"); } catch (?? e) { // ??? ????? ??} }
??? ?? : ?? ???? ?? ?? ???? ?? ? ? ??? ???? ??????.
?? ??? : ?? ??? ???? ??? ?????? ??? ???????.
?? : ?? ???? ?? (Java 9)
?? ? ??????? provides ... with ...
??? ??? ?? ??? ?? ? ? ????.
// module-info.java ?? com.example.logger { com.example.logger? com.example.impl.consolelogger? ?? ?????. }
??? ??? ?? ???? ???? ??? ?? ??? ???? ??? ? ????.
????? ?? ??. SPI? ????? ??? ??? ???? ???? ?? ???? ?? ? ????. ??? ?????? ? ???? ???? ??? ???? "? ???"?? ??? ?? ???? ?? ?????? ??? ???? ????.
? ??? Java ??? ?? ?? ????? (SPI)? ?? ?? ???? ??? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Stock Market GPT
? ??? ??? ?? AI ?? ?? ??

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

-CP ?? ??? ???? JVM? ClassPath? ???? JAVA -Clibrary.jarcom.example.Main? ?? ?? ??? ? ?????? ? ? ???, ?? ???? ?? ???? ?? ? ?? ???? ???? ??? ?? ?? ?? ?? Manifest.MF? ?? ?? ? ? ????.

usefile.createnewfile () to reatefileonlyifitdoesn'texist, ???;

Javaspi? JDK? ?? ??? ?? ?????? Serviceloader? ?? ????? ?? ?? ??? ?????. 1. ??? ?????? ???? Meta-Inf/Services/?? ?????? ?? ??? ?? ??? ???? ?? ???? ??? ? ??? ??????. 2. serviceloader.load ()? ???? ?? ???????? JVM? ???? ??? ?? ????????. 3. ????? ??? ?? ?? ?? ??? ?? ?? ? ?????? ???? ?? ??? ???????. 4. ?? ???? ?????? ?? ?? ?? ??? ? ???? ??? ?????. 5. ??, ??? ??, ?? ??, ??? ?? ? ?? ??????????. 6. Java9??? ?? ???? ?? ?? ? ? ????.

Amplements ???? ???? ?????? ??????. ? ???? ??????? ?? ???? ?? ??? ???????. ?? ?????? ???? ???? ????? ??? ?????. Java 8 ??? ?? ? ?? ???? ?? ??? ??? ????.

javagenericsprovidecompile-timetypesafetyandeliminatecastingtypeparametersonclasses, interfaces, methods; wildcards (?,? extendStype,? supertype) handlUnknowntypeswithflexible.1.useUnunUnunUndwildCardWhentyPeiLISIRVENTERREATHERNEATHEATHEATHEATHEATHEATHEATHEATHEATHEARVENTOUBERDERRELOUNTERRELONTERREATHEARBERBERBENTECASTS;

? ????? ??? TCP ??, ? HTTP ?? ?? (Keep-Alive)?? ?? HTTP ??? ???? ????? ????? ?? ???. ? ??? HTTP/1.X? HTTP/2 ????? ??? ????? ???? ??? ?? ?? ? ??? ???? ??? ???? ???? ?? : ?? ??? ???? ???? ??? ?????. ???? ??? ???? ?? ??? ?????? ???? ????? ??? HTTP ?????? ?? ? ? ??? ?????.

? ????? Java? ?? ?? ??? ???? ?? ? ?? ??? ????? ???? ?? ?? ??? ?? ??? ???? ??? ??? ?????. ? ??? Java 8 Stream API? FlatMap ??? ?? ? ?? ?? ???? ?????. ? ??? ???? ??? ?? ??? ??? ?? ????? ??? ????? ?? ??? ??? ?? ?????.

?? ???? ???? Java ?? ??? ?? ?????. 1. config.properties? ??? ????? ?? getClassLoader (). getResourCeasStream ()? ???????? () ???? ???? ?????? ??? ????. 2. ??? ?? ????? ?? FileInputStream? ??????????. 3. GetProperty (?, ???)? ???? ?? ? ?? ???? ???? ???? ?? ?? ? ?? ??? ?????.
