자바 의 SPI 메커니즘 실례 상세 설명
SPI 의 전체 이름 은 Service Provider Interface 입 니 다.일반 개발 자 들 은 잘 모 를 수도 있 습 니 다.이것 은 제조 업 체 나 플러그 인 을 위 한 것 이기 때 문 입 니 다.java.util.Service Loader 문서 에 비교적 상세 한 소개 가 있 습 니 다.그 사상 을 따 져 보면 사실은'콜 백'과 차이 가 많 지 않다.'Callback'의 사상 은 우리 가 API 를 호출 할 때 우 리 는 스스로 논리 코드 를 써 서 API 에 들 어 갈 수 있 고 API 내부 가 적당 할 때 호출 되 어 어느 정도 의'맞 춤 형'을 실현 할 수 있다 는 것 이다.
전형 적 인 것 은 Collections.sort(List
이 사상 을 확장 시 켜 우 리 는 SPI 로 위의 예 를 다시 실현 한다.클 라 이언 트 는 자신의 정렬 규칙 을 하나의 클래스 로 작성 하고 Jar 파일 로 포장 합 니 다.이 Jar 파일 에는 META-INF 디 렉 터 리 가 있어 야 합 니 다.그 아래 에는 services 디 렉 터 리 가 있 고 그 다음 에는 텍스트 파일 이 있 습 니 다.파일 이름 은 인터페이스의 전체 이름 입 니 다.
java.util.Comparator。
--META-INF
--services
--java.util.Comparator
파일 내용 은 한 줄 만 있 습 니 다:
com.company1.ComparatorProvider
이 줄 은 Comparator 인터페이스의 클래스 의 전체 이름 입 니 다.코드 는 다음 과 같 습 니 다.
package com.company1;
import java.util.Comparator;
import com.mycompany.myapp.MyItem;
public class ComparatorProvider implements Comparator<MyItem>{
@Override
public int compare(MyItem o1, MyItem o2) {
// name
return o1.getName().compareTo(o2.getName());
}
}
압축 을 컴 파일 한 후 메 인 프로그램의 class path 에 넣 으 십시오.다음은 주 프로그램 입 니 다.
// class path Jar META-INF , 。
private static ServiceLoader<Comparator> serviceLoader
= ServiceLoader.load(Comparator.class);
public static void main(String[] args)
{
List<MyItem> myList = new ArrayList<MyItem>();
myList.add(new MyItem(2,"c","hhh"));
myList.add(new MyItem(3,"k","ooo"));
myList.add(new MyItem(4,"d","ppp"));
myList.add(new MyItem(5,"b","ggg"));
showList(myList);
Collections.sort(myList,getCompartor());
showList(myList);
}
@SuppressWarnings("unchecked")
private static Comparator<MyItem> getCompartor() {
for(Comparator service : serviceLoader)
{
return (Comparator<MyItem>)service;
}
return null;
}
주의해 야 할 것 은 serviceLoader 는 처음에는 로 딩 클래스 일 뿐 이 며,실례 화 는 처음 사용 할 때 까지 입 니 다.마 이 아 이 템 과 방법 쇼 리스트 는 중요 하지 않 으 니 신경 쓰 지 마 세 요.이 규칙 에 따라 다른 정렬 규칙 의 Jar 를 쓸 수 있 습 니 다.언제든지 정렬 규칙 을 바 꿀 수 있 습 니 다.읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.