From dea1e7f466535bde7ad7de57d3e6d63bc0dbd899 Mon Sep 17 00:00:00 2001 From: wentch <22250530@qq.com> Date: Fri, 15 Jan 2016 13:52:29 +0800 Subject: [PATCH] --- src/org/redkale/util/ResourceFactory.java | 38 +++++++++++++++++------ 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/org/redkale/util/ResourceFactory.java b/src/org/redkale/util/ResourceFactory.java index 48b081844..3f680aee4 100644 --- a/src/org/redkale/util/ResourceFactory.java +++ b/src/org/redkale/util/ResourceFactory.java @@ -55,11 +55,19 @@ public final class ResourceFactory { } public void register(final Class clazz, final Object rs) { - register("", clazz, rs); + register(true, clazz, rs); + } + + public void register(final boolean autoSync, final Class clazz, final Object rs) { + register(autoSync, "", clazz, rs); } public void register(final Object rs) { - if (rs != null) register("", rs.getClass(), rs); + register(true, rs); + } + + public void register(final boolean autoSync, final Object rs) { + if (rs != null) register(autoSync, "", rs.getClass(), rs); } public void add(final Type clazz, final ResourceLoader rs) { @@ -68,18 +76,26 @@ public final class ResourceFactory { } public void register(final String name, final Object rs) { + register(true, name, rs); + } + + public void register(final boolean autoSync, final String name, final Object rs) { final Class claz = rs.getClass(); ResourceType rtype = (ResourceType) claz.getAnnotation(ResourceType.class); if (rtype == null) { - register(name, claz, rs); + register(autoSync, name, claz, rs); } else { for (Class cl : rtype.value()) { - register(name, cl, rs); + register(autoSync, name, cl, rs); } } } public void register(final String name, final Class clazz, final A rs) { + register(true, name, clazz, rs); + } + + public void register(final boolean autoSync, final String name, final Class clazz, final A rs) { ConcurrentHashMap map = this.store.get(clazz); if (map == null) { ConcurrentHashMap sub = new ConcurrentHashMap(); @@ -90,14 +106,18 @@ public final class ResourceFactory { if (re == null) { map.put(name, new ResourceEntry(rs)); } else { - map.put(name, new ResourceEntry(rs, re.elements)); + map.put(name, new ResourceEntry(rs, re.elements, autoSync)); } } } public void register(final String name, final Type clazz, final A rs) { + register(true, name, clazz, rs); + } + + public void register(final boolean autoSync, final String name, final Type clazz, final A rs) { if (clazz instanceof Class) { - register(name, (Class) clazz, rs); + register(autoSync, name, (Class) clazz, rs); return; } ConcurrentHashMap map = this.gencstore.get(clazz); @@ -110,7 +130,7 @@ public final class ResourceFactory { if (re == null) { map.put(name, new ResourceEntry(rs)); } else { - map.put(name, new ResourceEntry(rs, re.elements)); + map.put(name, new ResourceEntry(rs, re.elements, autoSync)); } } } @@ -299,10 +319,10 @@ public final class ResourceFactory { this.elements = new CopyOnWriteArrayList<>(); } - public ResourceEntry(T value, final List elements) { + public ResourceEntry(T value, final List elements, boolean sync) { this.value = value; this.elements = elements == null ? new CopyOnWriteArrayList<>() : elements; - if (elements != null && !elements.isEmpty()) { + if (sync && elements != null && !elements.isEmpty()) { for (ResourceElement element : elements) { Object dest = element.dest.get();