1616 */
1717package io .microsphere .io ;
1818
19- import io .microsphere .util .PriorityComparator ;
20-
2119import java .util .HashMap ;
2220import java .util .LinkedList ;
2321import java .util .List ;
2422import java .util .Map ;
2523
24+ import static io .microsphere .collection .ListUtils .first ;
25+ import static io .microsphere .collection .ListUtils .last ;
2626import static io .microsphere .reflect .TypeUtils .resolveTypeArgumentClasses ;
27+ import static io .microsphere .util .ClassLoaderUtils .getDefaultClassLoader ;
28+ import static io .microsphere .util .ServiceLoaderUtils .loadServicesList ;
2729import static java .util .Collections .emptyList ;
28- import static java .util .ServiceLoader .load ;
2930
3031/**
3132 * {@link Deserializer} Utilities class
@@ -44,16 +45,15 @@ public Deserializers(ClassLoader classLoader) {
4445 }
4546
4647 public Deserializers () {
47- this (Thread . currentThread (). getContextClassLoader ());
48+ this (getDefaultClassLoader ());
4849 }
4950
5051 public void loadSPI () {
51- for (Deserializer deserializer : load (Deserializer .class )) {
52+ for (Deserializer deserializer : loadServicesList (Deserializer .class , classLoader )) {
5253 List <Class <?>> typeArguments = resolveTypeArgumentClasses (deserializer .getClass ());
53- Class <?> targetClass = typeArguments . isEmpty () ? Object . class : typeArguments . get ( 0 );
54+ Class <?> targetClass = first ( typeArguments );
5455 List <Deserializer > deserializers = typedDeserializers .computeIfAbsent (targetClass , k -> new LinkedList ());
5556 deserializers .add (deserializer );
56- deserializers .sort (PriorityComparator .INSTANCE );
5757 }
5858 }
5959
@@ -80,7 +80,7 @@ public Deserializer<?> getMostCompatible(Class<?> deserializedType) {
8080 */
8181 public <T > Deserializer <T > getHighestPriority (Class <?> deserializedType ) {
8282 List <Deserializer <T >> serializers = get (deserializedType );
83- return serializers . isEmpty () ? null : serializers . get ( 0 );
83+ return first ( serializers );
8484 }
8585
8686 /**
@@ -92,7 +92,7 @@ public <T> Deserializer<T> getHighestPriority(Class<?> deserializedType) {
9292 */
9393 public <T > Deserializer <T > getLowestPriority (Class <?> deserializedType ) {
9494 List <Deserializer <T >> serializers = get (deserializedType );
95- return serializers . isEmpty () ? null : serializers . get ( 0 );
95+ return last ( serializers );
9696 }
9797
9898 /**
0 commit comments