#365 simplify caching

This commit is contained in:
Christian Schuster 2015-05-26 23:33:48 +02:00 committed by Andreas Gudian
parent 9f7fb11552
commit c2649571a1

View File

@ -18,9 +18,7 @@
*/ */
package org.mapstruct.ap.services; package org.mapstruct.ap.services;
import java.util.Map;
import java.util.ServiceLoader; import java.util.ServiceLoader;
import java.util.WeakHashMap;
import org.mapstruct.spi.AccessorNamingStrategy; import org.mapstruct.spi.AccessorNamingStrategy;
@ -31,7 +29,7 @@ import org.mapstruct.spi.AccessorNamingStrategy;
*/ */
public class Services { public class Services {
private static final Map<Class<?>, Object> CACHE = new WeakHashMap<Class<?>, Object>(); private static final AccessorNamingStrategy ACCESSOR_NAMING_STRATEGY = findAccessorNamingStrategy();
private Services() { private Services() {
} }
@ -46,18 +44,18 @@ public class Services {
* {@link ServiceLoader#load(Class, ClassLoader)}. * {@link ServiceLoader#load(Class, ClassLoader)}.
*/ */
public static AccessorNamingStrategy getAccessorNamingStrategy() { public static AccessorNamingStrategy getAccessorNamingStrategy() {
AccessorNamingStrategy impl = (AccessorNamingStrategy) CACHE.get( AccessorNamingStrategy.class ); return ACCESSOR_NAMING_STRATEGY;
}
private static AccessorNamingStrategy findAccessorNamingStrategy() {
AccessorNamingStrategy impl = find( AccessorNamingStrategy.class );
if ( impl == null ) { if ( impl == null ) {
impl = get( AccessorNamingStrategy.class ); impl = new DefaultAccessorNamingStrategy();
if ( impl == null ) {
impl = new DefaultAccessorNamingStrategy();
}
CACHE.put( AccessorNamingStrategy.class, impl );
} }
return impl; return impl;
} }
private static <T> T get(Class<T> spi) { private static <T> T find(Class<T> spi) {
T matchingImplementation = null; T matchingImplementation = null;
for ( T implementation : ServiceLoader.load( spi, spi.getClassLoader() ) ) { for ( T implementation : ServiceLoader.load( spi, spi.getClassLoader() ) ) {