diff --git a/src/main/java/org/redkale/annotation/ResourceListener.java b/src/main/java/org/redkale/annotation/ResourceChanged.java
similarity index 56%
rename from src/main/java/org/redkale/annotation/ResourceListener.java
rename to src/main/java/org/redkale/annotation/ResourceChanged.java
index 68d51d4ef..1cd0076d5 100644
--- a/src/main/java/org/redkale/annotation/ResourceListener.java
+++ b/src/main/java/org/redkale/annotation/ResourceChanged.java
@@ -11,7 +11,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* @Resource资源被更新时的监听事件, 本注解只能标记在方法参数为ResourceEvent[]上
- * 注意: 一个类只能存在一个@ResourceListener的方法, 多余的会被忽略
+ * 注意: 一个类只能存在一个@ResourceChanged的方法, 多余的会被忽略
* 方法在资源被更新以后调用。
*
*
@@ -23,22 +23,21 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
* @Resource(name = "record.name")
* private String name;
*
- * @ResourceListener
+ * @ResourceChanged
* private void changeResource(ResourceEvent[] events) {
- * for(ResourceEvent event : events) {
- * System.out .println("@Resource = " + event.name() + " 资源变更: newVal = " + event.newValue() + ", oldVal = " + event.oldValue());
- * }
- * }
- *
- * public static void main(String[] args) throws Exception {
- * ResourceFactory factory = ResourceFactory.root();
- * factory.register("record.id", "2345");
- * factory.register("record.name", "my old name");
- * Record record = new Record();
- * factory.inject(record);
- * factory.register("record.name", "my new name");
- * }
+ * for(ResourceEvent event : events) {
+ * System.out .println("@Resource = " + event.name() + " 资源变更: newVal = " + event.newValue() + ", oldVal = " + event.oldValue());
+ * }
+ * }
*
+ * public static void main(String[] args) throws Exception {
+ * ResourceFactory factory = ResourceFactory.create();
+ * factory.register("record.id", "2345");
+ * factory.register("record.name", "my old name");
+ * Record record = new Record();
+ * factory.inject(record);
+ * factory.register("record.name", "my new name");
+ * }
* }
*
*
@@ -50,12 +49,12 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Documented
@Target({METHOD})
@Retention(RUNTIME)
-public @interface ResourceListener {
+public @interface ResourceChanged {
/**
* 新旧值是否不同时才回调方法
+ * public class ResourceService implements Service {
+ *
+ * @Resource(name = "res.id")
+ * private int id;
+ *
+ * @Resource(name = "res.name")
+ * private String name;
+ *
+ * @ResourceInjected
+ * private void onInjected(Object src, String fieldName) {
+ * System.out .println("资源被注入到对象(" + src + ")的字段(" + fieldName + ")上");
+ * }
+ * }
+ *
+ * public class RecordService implements Service {
+ *
+ * @Resource
+ * private ResourceService resService;
+ *
+ * public void test() {
+ * }
+ *
+ * public static void main(String[] args) throws Exception {
+ * ResourceFactory factory = ResourceFactory.create();
+ * factory.register("res.id", "2345");
+ * factory.register("res.name", "my old name");
+ * ResourceService res = new ResourceService();
+ * factory.inject(res);
+ * factory.register("", res);
+ * RecordService serice = new RecordService();
+ * factory.inject(record);
+ * }
+ * }
+ *
+ *
+ *
+ * 详情见: https://redkale.org
+ *
+ * @author zhangjx
+ */
+@Documented
+@Target({METHOD})
+@Retention(RUNTIME)
+public @interface ResourceInjected {
+
+}
diff --git a/src/main/java/org/redkale/cluster/CacheClusterAgent.java b/src/main/java/org/redkale/cluster/CacheClusterAgent.java
index 4b30829ee..c9de15d1a 100644
--- a/src/main/java/org/redkale/cluster/CacheClusterAgent.java
+++ b/src/main/java/org/redkale/cluster/CacheClusterAgent.java
@@ -11,7 +11,6 @@ import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
import java.util.logging.Level;
import org.redkale.annotation.*;
-import org.redkale.annotation.ResourceListener;
import org.redkale.boot.*;
import org.redkale.convert.json.JsonConvert;
import org.redkale.inject.Resourcable;
@@ -19,6 +18,7 @@ import org.redkale.inject.ResourceEvent;
import org.redkale.service.Service;
import org.redkale.source.CacheSource;
import org.redkale.util.*;
+import org.redkale.annotation.ResourceChanged;
/**
* 使用CacheSource实现的第三方服务发现管理接口cluster
@@ -60,7 +60,7 @@ public class CacheClusterAgent extends ClusterAgent implements Resourcable {
}
@Override
- @ResourceListener
+ @ResourceChanged
public void onResourceChange(ResourceEvent[] events) {
StringBuilder sb = new StringBuilder();
int newTtls = this.ttls;
diff --git a/src/main/java/org/redkale/cluster/ClusterAgent.java b/src/main/java/org/redkale/cluster/ClusterAgent.java
index 1d08ca927..9b5b6777c 100644
--- a/src/main/java/org/redkale/cluster/ClusterAgent.java
+++ b/src/main/java/org/redkale/cluster/ClusterAgent.java
@@ -13,7 +13,6 @@ import java.util.concurrent.*;
import java.util.logging.*;
import org.redkale.annotation.*;
import org.redkale.annotation.AutoLoad;
-import org.redkale.annotation.ResourceListener;
import org.redkale.boot.*;
import static org.redkale.boot.Application.*;
import org.redkale.convert.ConvertDisabled;
@@ -24,6 +23,7 @@ import org.redkale.net.http.*;
import org.redkale.net.sncp.*;
import org.redkale.service.*;
import org.redkale.util.*;
+import org.redkale.annotation.ResourceChanged;
/**
* 服务注册中心管理类cluster
@@ -103,7 +103,7 @@ public abstract class ClusterAgent {
}
}
- @ResourceListener
+ @ResourceChanged
public abstract void onResourceChange(ResourceEvent[] events);
public void destroy(AnyValue config) {
diff --git a/src/main/java/org/redkale/inject/ResourceFactory.java b/src/main/java/org/redkale/inject/ResourceFactory.java
index a9284f4fb..ebc75f6ef 100644
--- a/src/main/java/org/redkale/inject/ResourceFactory.java
+++ b/src/main/java/org/redkale/inject/ResourceFactory.java
@@ -114,10 +114,16 @@ public final class ResourceFactory {
this.store.clear();
}
+ /**
+ * inject时的锁
+ */
public void lock() {
lock.lock();
}
+ /**
+ * inject时的锁
+ */
public void unlock() {
lock.unlock();
}
@@ -139,6 +145,13 @@ public final class ResourceFactory {
}
}
+ /**
+ * 获取资源的注入类型,class存在ResourceType注解的优先用ResourceType.value, 没有则使用type本身的class
+ *
+ * @param type 资源类型
+ *
+ * @return 注入的Type
+ */
public static Class getResourceType(Type type) {
Class> clazz = TypeToken.typeToClass(type);
ResourceType rt = clazz.getAnnotation(ResourceType.class);
@@ -201,7 +214,7 @@ public final class ResourceFactory {
if (rs == null) {
return null;
}
- return (A) register(autoSync, "", rs);
+ return register(autoSync, "", rs);
}
/**
@@ -494,8 +507,8 @@ public final class ResourceFactory {
if (entry != null && entry.elements != null) {
for (ResourceElement element : entry.elements) {
Object dest = element.dest.get();
- if (dest != null && element.listener != null) {
- envListenMap.put(dest, element.listener);
+ if (dest != null && element.changedMethod != null) {
+ envListenMap.put(dest, element.changedMethod);
}
}
}
@@ -512,7 +525,7 @@ public final class ResourceFactory {
if (envListenMap.containsKey(dest)) {
return; //跳过含有@Resource Environment字段的对象
}
- Method listener = list.get(0).listener;
+ Method listener = list.get(0).method;
try {
ResourceEvent[] events = new ResourceEvent[list.size()];
for (int i = 0; i < list.size(); i++) {
@@ -618,7 +631,10 @@ public final class ResourceFactory {
*/
public boolean contains(boolean recursive, String name, Class extends A> clazz) {
Map
* 详情见: https://redkale.org
*
- * @see org.redkale.annotation.ResourceListener
+ * @see org.redkale.annotation.ResourceChanged
*
* @author zhangjx
- * @deprecated replaced by org.redkale.annotation.ResourceListener
+ * @deprecated replaced by org.redkale.annotation.ResourceChanged
*/
@Deprecated(since = "2.8.0")
@Documented
diff --git a/src/test/java/org/redkale/test/util/ResourceAnnotationTest.java b/src/test/java/org/redkale/test/inject/ResourceAnnotationTest.java
similarity index 98%
rename from src/test/java/org/redkale/test/util/ResourceAnnotationTest.java
rename to src/test/java/org/redkale/test/inject/ResourceAnnotationTest.java
index 01038d6de..fb4154945 100644
--- a/src/test/java/org/redkale/test/util/ResourceAnnotationTest.java
+++ b/src/test/java/org/redkale/test/inject/ResourceAnnotationTest.java
@@ -3,7 +3,7 @@
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
-package org.redkale.test.util;
+package org.redkale.test.inject;
import java.io.File;
import java.lang.annotation.*;
diff --git a/src/test/java/org/redkale/test/inject/ResourceInjectedTest.java b/src/test/java/org/redkale/test/inject/ResourceInjectedTest.java
new file mode 100644
index 000000000..8c23f7add
--- /dev/null
+++ b/src/test/java/org/redkale/test/inject/ResourceInjectedTest.java
@@ -0,0 +1,68 @@
+/*
+ *
+ */
+package org.redkale.test.inject;
+
+import java.util.concurrent.atomic.AtomicInteger;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.redkale.annotation.Resource;
+import org.redkale.annotation.ResourceInjected;
+import org.redkale.inject.ResourceFactory;
+import org.redkale.service.Service;
+
+/**
+ *
+ * @author zhangjx
+ */
+public class ResourceInjectedTest {
+
+ public static void main(String[] args) throws Throwable {
+ ResourceInjectedTest test = new ResourceInjectedTest();
+ test.run();
+ }
+
+ @Test
+ public void run() throws Exception {
+ ResourceFactory factory = ResourceFactory.create();
+ factory.register("res.id", "2345");
+ factory.register("res.name", "my old name");
+ ResourceService res = new ResourceService();
+ factory.inject(res);
+ factory.register("", res);
+ RoomService serice = new RoomService();
+ factory.inject(serice);
+ Assertions.assertEquals(1, ResourceService.counter.get());
+ }
+
+ public static class RoomService implements Service {
+
+ @Resource
+ private ResourceService resService;
+
+ public void test() {
+ resService.doing();
+ }
+ }
+
+ public static class ResourceService implements Service {
+
+ private static final AtomicInteger counter = new AtomicInteger();
+
+ @Resource(name = "res.id")
+ private int id;
+
+ @Resource(name = "res.name")
+ private String name;
+
+ @ResourceInjected
+ private void onInjected(Object src, String fieldName) {
+ counter.incrementAndGet();
+ System.out.println("资源被注入到对象(" + src + ")的字段(" + fieldName + ")上");
+ }
+
+ public void doing() {
+ System.out.println("id = " + id + ", name = " + name);
+ }
+ }
+}
diff --git a/src/test/java/org/redkale/test/util/ResourceListenerTest.java b/src/test/java/org/redkale/test/inject/ResourceListenerTest.java
similarity index 93%
rename from src/test/java/org/redkale/test/util/ResourceListenerTest.java
rename to src/test/java/org/redkale/test/inject/ResourceListenerTest.java
index 427999a41..f99e673aa 100644
--- a/src/test/java/org/redkale/test/util/ResourceListenerTest.java
+++ b/src/test/java/org/redkale/test/inject/ResourceListenerTest.java
@@ -1,15 +1,15 @@
/*
*/
-package org.redkale.test.util;
+package org.redkale.test.inject;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicInteger;
import org.junit.jupiter.api.*;
import org.redkale.annotation.Resource;
-import org.redkale.annotation.ResourceListener;
import org.redkale.inject.ResourceEvent;
import org.redkale.inject.ResourceFactory;
import org.redkale.util.*;
+import org.redkale.annotation.ResourceChanged;
/**
*
@@ -71,7 +71,7 @@ public class ResourceListenerTest {
@Resource(name = "property.desc", required = false)
private String desc;
- @ResourceListener
+ @ResourceChanged
private void changeResource(ResourceEvent[] events) {
for (ResourceEvent event : events) {
counter.incrementAndGet();
@@ -92,7 +92,7 @@ public class ResourceListenerTest {
@Resource
private Environment env;
- @ResourceListener
+ @ResourceChanged
private void changeResource(ResourceEvent[] events) {
for (ResourceEvent event : events) {
counter.incrementAndGet();
@@ -116,7 +116,7 @@ public class ResourceListenerTest {
@Resource
private Environment env;
- @ResourceListener
+ @ResourceChanged
private void changeResource(ResourceEvent[] events) {
for (ResourceEvent event : events) {
counter.incrementAndGet();
diff --git a/src/test/java/org/redkale/test/util/ResourceLoaderTest.java b/src/test/java/org/redkale/test/inject/ResourceLoaderTest.java
similarity index 94%
rename from src/test/java/org/redkale/test/util/ResourceLoaderTest.java
rename to src/test/java/org/redkale/test/inject/ResourceLoaderTest.java
index 9d58df26b..da4981732 100644
--- a/src/test/java/org/redkale/test/util/ResourceLoaderTest.java
+++ b/src/test/java/org/redkale/test/inject/ResourceLoaderTest.java
@@ -1,6 +1,6 @@
/*
*/
-package org.redkale.test.util;
+package org.redkale.test.inject;
import org.junit.jupiter.api.*;
import org.redkale.annotation.Resource;
diff --git a/src/test/java/org/redkale/test/util/ResourceTest.java b/src/test/java/org/redkale/test/inject/ResourceTest.java
similarity index 99%
rename from src/test/java/org/redkale/test/util/ResourceTest.java
rename to src/test/java/org/redkale/test/inject/ResourceTest.java
index 5b5a9b567..2fb52739f 100644
--- a/src/test/java/org/redkale/test/util/ResourceTest.java
+++ b/src/test/java/org/redkale/test/inject/ResourceTest.java
@@ -3,7 +3,7 @@
* To change this template bigint, choose Tools | Templates
* and open the template in the editor.
*/
-package org.redkale.test.util;
+package org.redkale.test.inject;
import java.math.BigInteger;
import java.util.Properties;
@@ -77,7 +77,7 @@ class BService {
private String name = "";
- @ResourceListener
+ @ResourceChanged
private void changeResource(ResourceEvent[] events) {
for (ResourceEvent event : events) {
System.out.println(getClass().getSimpleName() + " @Resource = " + event.name() + " 资源变更: newVal = " + event.newValue() + ", oldVal = " + event.oldValue());
@@ -54,7 +54,7 @@ public abstract class AbstractCacheSource extends AbstractService implements Cac
//@since 2.7.0
public static final String CACHE_SOURCE_PIPELINES = "pipelines";
- @ResourceListener
+ @ResourceChanged
public abstract void onResourceChange(ResourceEvent[] events);
//从Properties配置中创建DataSource
diff --git a/src/main/java/org/redkale/source/AbstractDataSource.java b/src/main/java/org/redkale/source/AbstractDataSource.java
index daa0924ff..6559808f2 100644
--- a/src/main/java/org/redkale/source/AbstractDataSource.java
+++ b/src/main/java/org/redkale/source/AbstractDataSource.java
@@ -15,7 +15,6 @@ import java.util.stream.Stream;
import org.redkale.annotation.*;
import org.redkale.annotation.AutoLoad;
import org.redkale.annotation.Comment;
-import org.redkale.annotation.ResourceListener;
import org.redkale.annotation.ResourceType;
import static org.redkale.boot.Application.RESNAME_APP_EXECUTOR;
import org.redkale.convert.json.JsonConvert;
@@ -26,6 +25,7 @@ import org.redkale.persistence.Entity;
import org.redkale.service.*;
import static org.redkale.source.DataSources.*;
import org.redkale.util.*;
+import org.redkale.annotation.ResourceChanged;
/**
* DataSource的S抽象实现类
@@ -69,7 +69,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data
return name;
}
- @ResourceListener
+ @ResourceChanged
public abstract void onResourceChange(ResourceEvent[] events);
protected void setSourceExecutor(ExecutorService executor) {
diff --git a/src/main/java/org/redkale/source/AbstractDataSqlSource.java b/src/main/java/org/redkale/source/AbstractDataSqlSource.java
index 56f120738..10f5e1b0c 100644
--- a/src/main/java/org/redkale/source/AbstractDataSqlSource.java
+++ b/src/main/java/org/redkale/source/AbstractDataSqlSource.java
@@ -16,7 +16,6 @@ import java.util.logging.*;
import java.util.stream.Stream;
import org.redkale.annotation.*;
import org.redkale.annotation.AutoLoad;
-import org.redkale.annotation.ResourceListener;
import org.redkale.annotation.ResourceType;
import static org.redkale.boot.Application.*;
import org.redkale.inject.ResourceEvent;
@@ -27,6 +26,7 @@ import static org.redkale.source.DataSources.*;
import org.redkale.source.EntityInfo.EntityColumn;
import org.redkale.util.*;
import static org.redkale.util.Utility.isEmpty;
+import org.redkale.annotation.ResourceChanged;
/**
* DataSource的SQL抽象实现类
@@ -148,7 +148,7 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement
}
@Override
- @ResourceListener
+ @ResourceChanged
public void onResourceChange(ResourceEvent[] events) {
if (events == null || events.length < 1) {
return;
diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java
index d177e324a..bc0bee1cf 100644
--- a/src/main/java/org/redkale/source/CacheMemorySource.java
+++ b/src/main/java/org/redkale/source/CacheMemorySource.java
@@ -19,13 +19,13 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.redkale.annotation.*;
import org.redkale.annotation.AutoLoad;
-import org.redkale.annotation.ResourceListener;
import org.redkale.annotation.ResourceType;
import org.redkale.convert.*;
import org.redkale.convert.json.*;
import org.redkale.inject.ResourceEvent;
import org.redkale.service.Local;
import org.redkale.util.*;
+import org.redkale.annotation.ResourceChanged;
/**
* CacheSource的默认实现--内存缓存
@@ -77,7 +77,7 @@ public final class CacheMemorySource extends AbstractCacheSource {
}
@Override
- @ResourceListener
+ @ResourceChanged
public void onResourceChange(ResourceEvent[] events) {
//do nothing
}
diff --git a/src/main/java/org/redkale/source/DataJdbcSource.java b/src/main/java/org/redkale/source/DataJdbcSource.java
index 091b50e90..d84566bb2 100644
--- a/src/main/java/org/redkale/source/DataJdbcSource.java
+++ b/src/main/java/org/redkale/source/DataJdbcSource.java
@@ -15,12 +15,12 @@ import java.util.logging.Level;
import java.util.stream.Stream;
import org.redkale.annotation.*;
import org.redkale.annotation.AutoLoad;
-import org.redkale.annotation.ResourceListener;
import org.redkale.annotation.ResourceType;
import org.redkale.inject.ResourceEvent;
import org.redkale.service.Local;
import static org.redkale.source.DataSources.*;
import org.redkale.util.*;
+import org.redkale.annotation.ResourceChanged;
/**
* DataSource的JDBC实现类
@@ -2902,7 +2902,7 @@ public class DataJdbcSource extends AbstractDataSqlSource {
resetMaxConnection();
}
- @ResourceListener
+ @ResourceChanged
public void onResourceChange(ResourceEvent[] events) {
int newConnectTimeoutSeconds = this.connectTimeoutSeconds;
int newMaxconns = this.maxConns;
diff --git a/src/main/java/org/redkale/source/DataMemorySource.java b/src/main/java/org/redkale/source/DataMemorySource.java
index 25c157c51..dcb305abb 100644
--- a/src/main/java/org/redkale/source/DataMemorySource.java
+++ b/src/main/java/org/redkale/source/DataMemorySource.java
@@ -10,11 +10,11 @@ import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Stream;
import org.redkale.annotation.AutoLoad;
-import org.redkale.annotation.ResourceListener;
import org.redkale.annotation.ResourceType;
import org.redkale.inject.ResourceEvent;
import org.redkale.service.Local;
import org.redkale.util.*;
+import org.redkale.annotation.ResourceChanged;
/**
*
@@ -47,7 +47,7 @@ public class DataMemorySource extends AbstractDataSource {
}
@Override
- @ResourceListener
+ @ResourceChanged
public void onResourceChange(ResourceEvent[] events) {
//do nothing
}
diff --git a/src/main/java/org/redkale/util/Environment.java b/src/main/java/org/redkale/util/Environment.java
index 94f1306f8..c1f1364d5 100644
--- a/src/main/java/org/redkale/util/Environment.java
+++ b/src/main/java/org/redkale/util/Environment.java
@@ -8,7 +8,7 @@ import java.util.function.*;
/**
* 环境变量, 只读版Properties
* 只存放system.property.、mimetype.property.、redkale.cachesource(.|[)、redkale.datasource(.|[)和其他非redkale.开头的配置项
- * 只有ResourceFactory.register(Properties properties, String environmentName, Class environmentType) 方法才能是Environment的ResourceListener起作用
+ * 只有ResourceFactory.register(Properties properties, String environmentName, Class environmentType) 方法才能是Environment的ResourceChanged起作用
*
* 详情见: https://redkale.org
*
diff --git a/src/main/java/org/redkale/util/ResourceListener.java b/src/main/java/org/redkale/util/ResourceListener.java
index e25e41d1e..2477e337d 100644
--- a/src/main/java/org/redkale/util/ResourceListener.java
+++ b/src/main/java/org/redkale/util/ResourceListener.java
@@ -31,7 +31,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
* }
*
* public static void main(String[] args) throws Exception {
- * ResourceFactory factory = ResourceFactory.root();
+ * ResourceFactory factory = ResourceFactory.create();
* factory.register("record.id", "2345");
* factory.register("record.name", "my old name");
* Record record = new Record();
@@ -45,10 +45,10 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
*