This commit is contained in:
Redkale
2019-10-10 09:17:42 +08:00
parent 5e3edb7e1d
commit a20570a6eb

View File

@@ -37,14 +37,14 @@ public final class ResourceFactory {
private static final Logger logger = Logger.getLogger(ResourceFactory.class.getSimpleName()); private static final Logger logger = Logger.getLogger(ResourceFactory.class.getSimpleName());
private static final ConcurrentHashMap<Type, ResourceInjectLoader> injectLoaderMap = new ConcurrentHashMap();
private final ResourceFactory parent; private final ResourceFactory parent;
private static final ResourceFactory instance = new ResourceFactory(null); private static final ResourceFactory instance = new ResourceFactory(null);
private final List<WeakReference<ResourceFactory>> chidren = new CopyOnWriteArrayList<>(); private final List<WeakReference<ResourceFactory>> chidren = new CopyOnWriteArrayList<>();
private final ConcurrentHashMap<Type, ResourceInjectLoader> injectLoaderMap = new ConcurrentHashMap();
private final ConcurrentHashMap<Type, ResourceLoader> resLoaderMap = new ConcurrentHashMap(); private final ConcurrentHashMap<Type, ResourceLoader> resLoaderMap = new ConcurrentHashMap();
private final ConcurrentHashMap<Type, ConcurrentHashMap<String, ResourceEntry>> store = new ConcurrentHashMap(); private final ConcurrentHashMap<Type, ConcurrentHashMap<String, ResourceEntry>> store = new ConcurrentHashMap();
@@ -55,7 +55,8 @@ public final class ResourceFactory {
ServiceLoader<ResourceInjectLoader> loaders = ServiceLoader.load(ResourceInjectLoader.class); ServiceLoader<ResourceInjectLoader> loaders = ServiceLoader.load(ResourceInjectLoader.class);
Iterator<ResourceInjectLoader> it = loaders.iterator(); Iterator<ResourceInjectLoader> it = loaders.iterator();
while (it.hasNext()) { while (it.hasNext()) {
this.register(it.next()); ResourceInjectLoader ril = it.next();
this.injectLoaderMap.put(ril.annotationType(), ril);
} }
} }
} }
@@ -575,7 +576,7 @@ public final class ResourceFactory {
try { try {
list.add(src); list.add(src);
Class clazz = src.getClass(); Class clazz = src.getClass();
final boolean diyloaderflag = !injectLoaderMap.isEmpty(); final boolean diyloaderflag = !instance.injectLoaderMap.isEmpty();
do { do {
if (java.lang.Enum.class.isAssignableFrom(clazz)) break; if (java.lang.Enum.class.isAssignableFrom(clazz)) break;
final String cname = clazz.getName(); final String cname = clazz.getName();
@@ -598,7 +599,7 @@ public final class ResourceFactory {
} }
} }
if (flag && diyloaderflag) { if (flag && diyloaderflag) {
injectLoaderMap.values().stream().forEach(iloader -> { instance.injectLoaderMap.values().stream().forEach(iloader -> {
Annotation ann = field.getAnnotation(iloader.annotationType()); Annotation ann = field.getAnnotation(iloader.annotationType());
if (ann == null) return; if (ann == null) return;
iloader.load(this, src, ann, field, attachment); iloader.load(this, src, ann, field, attachment);
@@ -705,7 +706,7 @@ public final class ResourceFactory {
public <T extends Annotation> void register(final ResourceInjectLoader<T> loader) { public <T extends Annotation> void register(final ResourceInjectLoader<T> loader) {
if (loader == null) return; if (loader == null) return;
injectLoaderMap.put(loader.annotationType(), loader); instance.injectLoaderMap.put(loader.annotationType(), loader);
} }
public void register(final ResourceLoader rs, final Type... clazzs) { public void register(final ResourceLoader rs, final Type... clazzs) {