JAVA SPI 메커니즘 과 사용 방법 에 대한 상세 한 설명

3278 단어 JAVAspi메커니즘
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 메커니즘 에 관 한 자 료 는 저희 의 다른 관련 문장 을 주목 해 주 십시오!

좋은 웹페이지 즐겨찾기