public interface CacheLookup { public String naming(); public Object get(); public void add(Object cache); public void remove(Object cache); }
public class DefaultCacheLookup implements CacheLookup { private List<Object> cached; private Object defaultCache; public DefaultCacheLookup() { cached = new ArrayList<Object>(); } public String naming() { return "default cache lookup provider"; } @Override public Object get() { int size = cached.size(); if (size < 1) { return defaultCache; } Random random = new Random(System.currentTimeMillis()); return cached.get(random.nextInt(size)); } @Override public void add(Object cache) { cached.add(cache); } @Override public void remove(Object cache) { cached.remove(cache); } }
public class AdvancedCacheLookup implements CacheLookup { private List<Object> cached; private Object defaultCache; public AdvancedCacheLookup() { cached = new ArrayList<Object>(); } public String naming() { return "advanced cache lookup provider"; } @Override public Object get() { int size = cached.size(); if (size < 1) { return defaultCache; } Random random = new Random(System.currentTimeMillis()); return cached.get(random.nextInt(size)); } @Override public void add(Object cache) { cached.add(cache); } @Override public void remove(Object cache) { cached.remove(cache); } }
classpath下META-INF\services\com.xxx.ddal.CacheLookup:
com.xxx.ddal.DefaultCacheLookup com.xxx.ddal.AdvancedCacheLookup
@Test public void test() { Iterator<CacheLookup> interator = Service.providers(CacheLookup.class); while (interator.hasNext()) { CacheLookup lookup = interator.next(); System.out.println(lookup.getClass()); System.out.println(lookup.naming()); } }
class com.xxx.ddal.DefaultCacheLookup
default cache lookup provider
class com.xxx.ddal.AdvancedCacheLookup
advanced cache lookup provider