优化依赖注入

This commit is contained in:
redkale
2023-06-28 10:37:16 +08:00
parent 5b45022dfb
commit 2591d92959
3 changed files with 17 additions and 18 deletions

View File

@@ -20,6 +20,12 @@ import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
public @interface Resource {
public static final String PARENT_NAME = "$";
public static final String SELF_NAME = "@name";
public static final String SELF_TYPE = "@type";
/**
* 是否必须存在
*

View File

@@ -9,7 +9,6 @@ import java.util.concurrent.*;
import org.redkale.annotation.Resource;
import org.redkale.boot.Application;
import org.redkale.net.WorkThread;
import org.redkale.util.ResourceFactory;
/**
*
@@ -21,10 +20,10 @@ public abstract class AbstractService implements Service {
@Resource(name = Application.RESNAME_APP_EXECUTOR, required = false)
private ExecutorService workExecutor;
@Resource(name = ResourceFactory.RESOURCE_SELF_NAME, required = false)
@Resource(name = Resource.SELF_NAME, required = false)
private String serviceName;
@Resource(name = ResourceFactory.RESOURCE_SELF_TYPE, required = false)
@Resource(name = Resource.SELF_TYPE, required = false)
private Class serviceType;
protected String serviceName() {

View File

@@ -40,12 +40,6 @@ import org.redkale.convert.*;
@SuppressWarnings("unchecked")
public final class ResourceFactory {
public static final String RESOURCE_PARENT_NAME = "$";
public static final String RESOURCE_SELF_NAME = "@name";
public static final String RESOURCE_SELF_TYPE = "@type";
private static final Logger logger = Logger.getLogger(ResourceFactory.class.getSimpleName());
private final ReentrantLock lock = new ReentrantLock();
@@ -575,19 +569,19 @@ public final class ResourceFactory {
if (rc == null) {
continue;
}
if (!rc.name().equals(RESOURCE_SELF_NAME) && !rc.name().equals(RESOURCE_SELF_TYPE)) {
if (!rc.name().equals(Resource.SELF_NAME) && !rc.name().equals(Resource.SELF_TYPE)) {
continue;
}
final Class classType = field.getType();
RedkaleClassLoader.putReflectionField(cname, field);
try {
if (rc.name().equals(RESOURCE_SELF_NAME)) {
if (rc.name().equals(Resource.SELF_NAME)) {
if (classType != String.class) {
throw new ResourceInjectException("resource(type=" + c.getSimpleName() + ".class, field=" + field.getName() + ", name='" + rc.name() + "') must be String ");
}
field.setAccessible(true);
field.set(val, name);
} else if (rc.name().equals(RESOURCE_SELF_TYPE)) {
} else if (rc.name().equals(Resource.SELF_TYPE)) {
if (classType != Type.class && classType != Class.class) {
throw new ResourceInjectException("resource(type=" + c.getSimpleName() + ".class, field=" + field.getName() + ", name='" + rc.name() + "') must be Type or Class ");
}
@@ -792,13 +786,13 @@ public final class ResourceFactory {
}
int pos = name.indexOf("{system.property.");
if (pos < 0) {
return (name.contains(RESOURCE_PARENT_NAME) && parent != null) ? name.replace(RESOURCE_PARENT_NAME, parent) : name;
return (name.contains(Resource.PARENT_NAME) && parent != null) ? name.replace(Resource.PARENT_NAME, parent) : name;
}
String prefix = name.substring(0, pos);
String subName = name.substring(pos + "{system.property.".length());
pos = subName.lastIndexOf('}');
if (pos < 0) {
return (name.contains(RESOURCE_PARENT_NAME) && parent != null) ? name.replace(RESOURCE_PARENT_NAME, parent) : name;
return (name.contains(Resource.PARENT_NAME) && parent != null) ? name.replace(Resource.PARENT_NAME, parent) : name;
}
String postfix = subName.substring(pos + 1);
String property = subName.substring(0, pos);
@@ -883,10 +877,10 @@ public final class ResourceFactory {
consumer.accept(srcObj, field);
}
String tname = rc1 == null ? rc2.name() : rc1.name();
if (tname.equals(RESOURCE_SELF_NAME) || tname.equals(RESOURCE_SELF_TYPE)) {
if (tname.equals(Resource.SELF_NAME) || tname.equals(Resource.SELF_TYPE)) {
continue;
}
if (tname.contains(RESOURCE_PARENT_NAME)) {
if (tname.contains(Resource.PARENT_NAME)) {
Resource res1 = srcObj.getClass().getAnnotation(Resource.class);
javax.annotation.Resource res2 = srcObj.getClass().getAnnotation(javax.annotation.Resource.class);
String presname = res1 == null ? (res2 == null ? srcResourceName : res2.name()) : res1.name();
@@ -894,13 +888,13 @@ public final class ResourceFactory {
if (srcObj instanceof Resourcable) {
String oname = ((Resourcable) srcObj).resourceName();
if (oname != null) {
tname = tname.replace(RESOURCE_PARENT_NAME, oname);
tname = tname.replace(Resource.PARENT_NAME, oname);
}
} else {
logger.log(Level.SEVERE, srcObj.getClass().getName() + " not found @Resource on Class or not implements Resourcable");
}
} else {
tname = tname.replace(RESOURCE_PARENT_NAME, presname);
tname = tname.replace(Resource.PARENT_NAME, presname);
}
}