优化filter加载

This commit is contained in:
redkale
2023-06-28 10:27:25 +08:00
parent a2be5a9430
commit 5b45022dfb
3 changed files with 19 additions and 10 deletions

View File

@@ -190,15 +190,18 @@ public class NodeHttpServer extends NodeServer {
protected void loadHttpFilter(final ClassFilter<? extends Filter> classFilter) throws Exception {
final StringBuilder sb = logger.isLoggable(Level.INFO) ? new StringBuilder() : null;
List<FilterEntry<? extends Filter>> list = new ArrayList(classFilter.getFilterEntrys());
for (FilterEntry<? extends Filter> en : list) {
Class<HttpFilter> clazz = (Class<HttpFilter>) en.getType();
for (FilterEntry<? extends Filter> entry : list) {
Class<HttpFilter> clazz = (Class<HttpFilter>) entry.getType();
if (Modifier.isAbstract(clazz.getModifiers())) {
continue;
}
if (entry.isExpect()) { //跳过不自动加载的Filter
continue;
}
RedkaleClassLoader.putReflectionDeclaredConstructors(clazz, clazz.getName());
final HttpFilter filter = clazz.getDeclaredConstructor().newInstance();
resourceFactory.inject(filter, this);
DefaultAnyValue filterConf = (DefaultAnyValue) en.getProperty();
DefaultAnyValue filterConf = (DefaultAnyValue) entry.getProperty();
this.httpServer.addHttpFilter(filter, filterConf);
if (sb != null) {
sb.append("Load ").append(clazz.getName()).append(LINE_SEPARATOR);
@@ -238,14 +241,17 @@ public class NodeHttpServer extends NodeServer {
});
final long starts = System.currentTimeMillis();
final List<AbstractMap.SimpleEntry<String, String[]>> ss = sb == null ? null : new ArrayList<>();
for (FilterEntry<? extends Servlet> en : list) {
Class<HttpServlet> clazz = (Class<HttpServlet>) en.getType();
for (FilterEntry<? extends Servlet> entry : list) {
Class<HttpServlet> clazz = (Class<HttpServlet>) entry.getType();
if (Modifier.isAbstract(clazz.getModifiers())) {
continue;
}
if (clazz.getAnnotation(Rest.RestDyn.class) != null) {
continue; //动态生成的跳过
}
if (entry.isExpect()) { //跳过不自动加载的Servlet
continue;
}
WebServlet ws = clazz.getAnnotation(WebServlet.class);
if (ws == null) {
continue;
@@ -259,7 +265,7 @@ public class NodeHttpServer extends NodeServer {
resourceFactory.inject(servlet, this);
final String[] mappings = ws.value();
String pref = ws.repair() ? prefix : "";
DefaultAnyValue servletConf = (DefaultAnyValue) en.getProperty();
DefaultAnyValue servletConf = (DefaultAnyValue) entry.getProperty();
this.httpServer.addHttpServlet(servlet, pref, servletConf, mappings);
if (ss != null) {
for (int i = 0; i < mappings.length; i++) {

View File

@@ -112,15 +112,18 @@ public class NodeSncpServer extends NodeServer {
protected void loadSncpFilter(final AnyValue servletsConf, final ClassFilter<? extends Filter> classFilter) throws Exception {
final StringBuilder sb = logger.isLoggable(Level.INFO) ? new StringBuilder() : null;
List<FilterEntry<? extends Filter>> list = new ArrayList(classFilter.getFilterEntrys());
for (FilterEntry<? extends Filter> en : list) {
Class<SncpFilter> clazz = (Class<SncpFilter>) en.getType();
for (FilterEntry<? extends Filter> entry : list) {
Class<SncpFilter> clazz = (Class<SncpFilter>) entry.getType();
if (Utility.isAbstractOrInterface(clazz)) {
continue;
}
if (entry.isExpect()) { //跳过不自动加载的Filter
continue;
}
RedkaleClassLoader.putReflectionDeclaredConstructors(clazz, clazz.getName());
final SncpFilter filter = clazz.getDeclaredConstructor().newInstance();
resourceFactory.inject(filter, this);
DefaultAnyValue filterConf = (DefaultAnyValue) en.getProperty();
DefaultAnyValue filterConf = (DefaultAnyValue) entry.getProperty();
this.sncpServer.addSncpFilter(filter, filterConf);
if (sb != null) {
sb.append("Load ").append(clazz.getName()).append(LINE_SEPARATOR);

View File

@@ -16,7 +16,7 @@ import org.redkale.util.Resourcable;
/**
* Redkale中缓存数据源的核心类。 主要供业务开发者使用, 技术开发者提供CacheSource的实现。<br>
* CacheSource提供三种数据类型操作: String、Long、byte[]和泛型指定的数据类型。<br>
* CacheSource提供三种数据类型操作: String、Long和泛型指定的数据类型。<br>
* String统一用setString、getString等系列方法。<br>
* Long统一用setLong、getLong、incr等系列方法。<br>
* 其他则供自定义数据类型使用。