-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: 新增InitializingFactory初始化接口以及线程池初始化实现 (#254)
Signed-off-by: unknowIfGuestInDream <tang97155@163.com>
- Loading branch information
1 parent
ec32d75
commit 2b2b9fa
Showing
6 changed files
with
246 additions
and
90 deletions.
There are no files selected for viewing
14 changes: 14 additions & 0 deletions
14
core/src/main/java/com/tlcsdm/core/factory/InitializingFactory.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package com.tlcsdm.core.factory; | ||
|
||
/** | ||
* 初始化对象 | ||
* | ||
* @author: unknowIfGuestInDream | ||
* @date: 2023/2/5 7:20 | ||
*/ | ||
public interface InitializingFactory { | ||
/** | ||
* 初始化 | ||
*/ | ||
void initialize() throws Exception; | ||
} |
32 changes: 32 additions & 0 deletions
32
core/src/main/java/com/tlcsdm/core/factory/config/ThreadPoolTaskExecutor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package com.tlcsdm.core.factory.config; | ||
|
||
import com.tlcsdm.core.factory.InitializingFactory; | ||
import org.apache.commons.lang3.concurrent.BasicThreadFactory; | ||
|
||
import java.util.concurrent.LinkedBlockingQueue; | ||
import java.util.concurrent.ThreadPoolExecutor; | ||
import java.util.concurrent.TimeUnit; | ||
|
||
/** | ||
* @author: unknowIfGuestInDream | ||
* @date: 2023/2/5 8:36 | ||
*/ | ||
public class ThreadPoolTaskExecutor implements InitializingFactory { | ||
public static ThreadPoolExecutor CORE_THREADPOOL; | ||
|
||
@Override | ||
public void initialize() throws Exception { | ||
CORE_THREADPOOL = new ThreadPoolExecutor(2, | ||
50, | ||
30, | ||
TimeUnit.SECONDS, | ||
new LinkedBlockingQueue<>(200), | ||
new BasicThreadFactory.Builder() | ||
.namingPattern("sample-").build(), | ||
new ThreadPoolExecutor.CallerRunsPolicy()); | ||
} | ||
|
||
public static ThreadPoolExecutor get() { | ||
return CORE_THREADPOOL; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
114 changes: 114 additions & 0 deletions
114
core/src/main/java/com/tlcsdm/core/util/InterfaceScanner.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
package com.tlcsdm.core.util; | ||
|
||
import java.io.IOException; | ||
import java.io.UncheckedIOException; | ||
import java.lang.module.ModuleReader; | ||
import java.lang.module.ResolvedModule; | ||
import java.lang.reflect.InvocationTargetException; | ||
import java.lang.reflect.Modifier; | ||
import java.util.ArrayList; | ||
import java.util.LinkedHashSet; | ||
import java.util.List; | ||
import java.util.Set; | ||
|
||
/** | ||
* Interface Scanner | ||
*/ | ||
public class InterfaceScanner { | ||
|
||
/** | ||
* Gets the list of sample classes to load | ||
* | ||
* @return The classes | ||
*/ | ||
public static List<Class<?>> discover(Class<?> clazz) { | ||
Class<?>[] results = new Class[]{}; | ||
List<Class<?>> list = new ArrayList<>(); | ||
try { | ||
results = loadFromPathScanning(clazz); | ||
} catch (Exception e) { | ||
e.printStackTrace(); | ||
} | ||
|
||
for (Class<?> sampleClass : results) { | ||
if (!clazz.isAssignableFrom(sampleClass)) { | ||
continue; | ||
} | ||
if (sampleClass.isInterface()) { | ||
continue; | ||
} | ||
if (Modifier.isAbstract(sampleClass.getModifiers())) { | ||
continue; | ||
} | ||
list.add(sampleClass); | ||
} | ||
return list; | ||
} | ||
|
||
public static void invoke(Class<?> clazz, String name, Class<?>... parameterTypes) { | ||
List<Class<?>> list = discover(clazz); | ||
for (Class<?> i : list) { | ||
try { | ||
i.getDeclaredMethod(name, parameterTypes).invoke(i.getDeclaredConstructor().newInstance()); | ||
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException | InstantiationException e) { | ||
e.printStackTrace(); | ||
} | ||
} | ||
} | ||
|
||
private static Class<?>[] loadFromPathScanning(Class<?> cls) { | ||
final Set<Class<?>> classes = new LinkedHashSet<>(); | ||
// scan the module-path | ||
ModuleLayer.boot().configuration().modules().stream().map(ResolvedModule::reference) | ||
.filter(rm -> isTlcsdmModule(rm.descriptor().name())).forEach(mref -> { | ||
try (ModuleReader reader = mref.open()) { | ||
reader.list().forEach(c -> { | ||
final Class<?> clazz = processClassName(c); | ||
if (clazz != null && cls.isAssignableFrom(clazz)) { | ||
classes.add(clazz); | ||
} | ||
}); | ||
} catch (IOException ioe) { | ||
throw new UncheckedIOException(ioe); | ||
} | ||
}); | ||
return classes.toArray(new Class[classes.size()]); | ||
} | ||
|
||
private static Class<?> processClassName(final String name) { | ||
String className = name.replace("\\", "."); | ||
className = className.replace("/", "."); | ||
|
||
// some cleanup code | ||
if (className.contains("$")) { | ||
// we don't care about samples as inner classes, so | ||
// we jump out | ||
return null; | ||
} | ||
if (className.contains(".bin")) { | ||
className = className.substring(className.indexOf(".bin") + 4); | ||
className = className.replace(".bin", ""); | ||
} | ||
if (className.startsWith(".")) { | ||
className = className.substring(1); | ||
} | ||
if (className.endsWith(".class")) { | ||
className = className.substring(0, className.length() - 6); | ||
} | ||
|
||
Class<?> clazz = null; | ||
try { | ||
clazz = Class.forName(className); | ||
} catch (Throwable e) { | ||
|
||
} | ||
return clazz; | ||
} | ||
|
||
/** | ||
* 只扫描tlcsdm下的包 | ||
*/ | ||
private static boolean isTlcsdmModule(final String moduleName) { | ||
return moduleName.startsWith("com.tlcsdm."); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,27 +1,29 @@ | ||
module com.tlcsdm.core { | ||
requires javafx.graphics; | ||
requires javafx.fxml; | ||
requires java.desktop; | ||
requires java.sql; | ||
requires org.apache.commons.lang3; | ||
requires javafx.controls; | ||
requires org.apache.commons.configuration2; | ||
requires org.controlsfx.controls; | ||
requires hutool.log; | ||
requires hutool.core; | ||
requires commons.beanutils; | ||
requires hutool.crypto; | ||
requires javafx.graphics; | ||
requires javafx.fxml; | ||
requires java.desktop; | ||
requires java.sql; | ||
requires org.apache.commons.lang3; | ||
requires javafx.controls; | ||
requires org.apache.commons.configuration2; | ||
requires org.controlsfx.controls; | ||
requires hutool.log; | ||
requires hutool.core; | ||
requires commons.beanutils; | ||
requires hutool.crypto; | ||
|
||
opens com.tlcsdm.core.javafx.controller to javafx.fxml; | ||
opens com.tlcsdm.core.javafx.view to javafx.fxml; | ||
opens com.tlcsdm.core.javafx.controller to javafx.fxml; | ||
opens com.tlcsdm.core.javafx.view to javafx.fxml; | ||
|
||
exports com.tlcsdm.core.javafx; | ||
exports com.tlcsdm.core.javafx.control; | ||
exports com.tlcsdm.core.javafx.controlsfx; | ||
exports com.tlcsdm.core.javafx.dialog; | ||
exports com.tlcsdm.core.javafx.helper; | ||
exports com.tlcsdm.core.javafx.util; | ||
exports com.tlcsdm.core.util; | ||
exports com.tlcsdm.core.exception; | ||
exports com.tlcsdm.core.javafx; | ||
exports com.tlcsdm.core.javafx.control; | ||
exports com.tlcsdm.core.javafx.controlsfx; | ||
exports com.tlcsdm.core.javafx.dialog; | ||
exports com.tlcsdm.core.javafx.helper; | ||
exports com.tlcsdm.core.javafx.util; | ||
exports com.tlcsdm.core.util; | ||
exports com.tlcsdm.core.exception; | ||
exports com.tlcsdm.core.factory; | ||
exports com.tlcsdm.core.factory.config; | ||
|
||
} |
Oops, something went wrong.