JAVA SPI 메커니즘 과 사용 방법 에 대한 상세 한 설명
SPI 는 자바 가 제공 하 는 서비스 로드 방식 으로 전체 이름 은 Service Provider Interface 입 니 다.자바 의 SPI 규범 에 따라 저 희 는 서비스 인 터 페 이 스 를 정의 할 수 있 습 니 다.구체 적 인 실현 은 해당 하 는 실현 자가 제공 하 는 것,즉 서비스 제공 자 입 니 다.그리고 사용 할 때 SPI 의 규범 에 따라 해당 하 는 서비스 제공 자의 서 비 스 를 얻 습 니 다.SPI 서비스 로드 메커니즘 을 통 해 서비스의 등록 과 발견 을 하면 코드 에서 구체 적 인 서비스 제공 자 를 죽 이 는 것 을 효과적으로 피 할 수 있다.이로써 인터페이스 프로 그래 밍 을 바탕 으로 모듈 간 의 결합 을 실현 할 수 있다.
SPI 메커니즘 의 약속
1.META-INF/services/디 렉 터 리 에 인터페이스 전체 한정 이름 을 가 진 파일 을 만 듭 니 다.이 파일 은 API 의 구체 적 인 구현 클래스 의 전체 제한 이름 입 니 다.
2 ServiceLoader 클래스 를 사용 하여 META-INF 의 실현 클래스 를 동적 으로 불 러 옵 니 다.
3.SPI 의 실현 클래스 가 Jar 인 경우 메 인 프로그램 ClassPath 에 넣 어야 합 니 다.
4.API 구체 적 인 실현 류 는 매개 변수 가 없 는 구조 방법 이 있어 야 한다.
SPI 응용 장면 예시
JDBC
jdbc 4.0 이전에 개발 자 는 Class.forName("xxx")방식 으로 구동 을 불 러 와 야 했 습 니 다.jdbc 4 도 spi 의 메커니즘 을 바탕 으로 구동 공급 자 를 발 견 했 습 니 다.METAINF/services/java.sql.driver 파일 에서 구현 클래스 를 지정 하 는 방식 으로 구동 공급 자 를 노출 할 수 있 습 니 다.
COMMON-LOGGING
apache 가 최초 로 제공 한 로그 의 인터페이스 입 니 다.인터페이스 만 있 고 실현 되 지 않 았 다.구체 적 인 방안 은 각 공급 자 에 의 해 이 루어 집 니 다.로그 공급 자 는 METAINF/services/org.apache.comons.logging.LogFactory 설정 파일 을 검색 하여 이 파일 의 내용 을 읽 고 로그 공상 실현 류 를 찾 습 니 다.로그 구현 에 이 파일 이 포함 되 어 있 고 파일 에 LogFactory 공장 인터페이스의 실현 류 를 만 들 면 됩 니 다.
SPI 메커니즘 코드 예시
인터페이스 People.java
package org.louis.spi.test;
public interface People {
public String speak();
}
클래스 중국어.자바 구현
package org.louis.spi.test;
public class Chinese implements People{
public String speak() {
return "Chinese speak Chinese.";
}
}
구현 클래스 American.java
package org.louis.spi.test;
public class American implements People{
public String speak() {
return "American speak English.";
}
}
META-INFF/Service 디 렉 터 리 에 파일 을 만 듭 니 다:파일 이름:org.louis.spi.test.People
파일 내용:
org.louis.spi.test.Chinese
org.louis.spi.test.American
위 코드 로 생 성 된 Jar 패 키 지 를 도입 하 는 테스트 프로젝트 를 새로 만 듭 니 다.테스트 클래스 SpiTest.java
package org.louis.test;
import java.util.Iterator;
import java.util.ServiceLoader;
import org.louis.spi.test.People;
import org.louis.spi.test.Chinese;
import org.louis.spi.test.American;
public class SpiTest {
public static void main(String[] args) {
ServiceLoader<People> peoples = ServiceLoader.load(People.class);
Iterator<IOperation> iterator = peoples.iterator();
while (iterator.hasNext()) {
People people = iterator.next();
System.out.println(people.speak());
}
}
}
실행 결과:Chinese speak Chinese.
American speak English.
위의 예 를 통 해 알 수 있 듯 이 만약 에 제 가 한국인 의 실현 에 새로 가입 하려 면 새로운 프로젝트 를 새로 만 들 고 Koeran 류 를 만들어 People 인 터 페 이 스 를 실현 하 며 자신의 프로젝트 META-INF/services 디 렉 터 리 에 하나의 프로필 을 설치 하여 Koeran 실현 류 를 지정 하고 공 사 를 Jar 패키지 로 만 들 면 새로운 서비스 개발 을 완성 할 수 있 습 니 다.
이상 은 예시 로 JAVA SPI 메커니즘 의 상세 한 내용 을 설명 하 는 것 입 니 다.JAVA SPI 메커니즘 에 관 한 자 료 는 저희 의 다른 관련 문장 을 주목 해 주 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.