Skip to content

Commit

Permalink
feat: 新增InitializingFactory初始化接口以及线程池初始化实现 (#254)
Browse files Browse the repository at this point in the history
Signed-off-by: unknowIfGuestInDream <tang97155@163.com>
  • Loading branch information
unknowIfGuestInDream committed Feb 5, 2023
1 parent ec32d75 commit 2b2b9fa
Show file tree
Hide file tree
Showing 6 changed files with 246 additions and 90 deletions.
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;
}
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;
}
}
96 changes: 48 additions & 48 deletions core/src/main/java/com/tlcsdm/core/javafx/util/Config.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package com.tlcsdm.core.javafx.util;

import java.io.File;
import java.util.Locale;

import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.builder.ReloadingFileBasedConfigurationBuilder;
import org.apache.commons.configuration2.builder.fluent.Parameters;
Expand All @@ -11,65 +8,68 @@
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.apache.commons.lang3.math.NumberUtils;

import java.io.File;
import java.util.Locale;

/**
* 存取框架配置
*
* @author unknowIfGuestInDream
*/
public class Config {

public static final String CONFIG_FILE_NAME = "systemConfigure.properties";
public static final String USERDATA_FILE_NAME = "data.xml";
public static final String CONFIG_FILE_NAME = "systemConfigure.properties";
public static final String USERDATA_FILE_NAME = "data.xml";

public static Locale defaultLocale = Locale.getDefault();// 设置系统语言
public static Locale defaultLocale = Locale.getDefault();// 设置系统语言

public static final String JAVAFX_TOOL_VERSION = "1.0.0";// xJavaFxTool版本信息
public static final String JAVAFX_TOOL_PUBLISHDATE = "2022-12-5";// 发布日期
public static final String JAVAFX_TOOL_VERSION = "1.0.0";// xJavaFxTool版本信息
public static final String JAVAFX_TOOL_PUBLISHDATE = "2022-12-5";// 发布日期

public enum Keys {
MainWindowWidth, MainWindowHeight, MainWindowTop, MainWindowLeft, Locale, NotepadEnabled,
RememberWindowLocation, ConfirmExit
}
public enum Keys {
MainWindowWidth, MainWindowHeight, MainWindowTop, MainWindowLeft, Locale, NotepadEnabled,
RememberWindowLocation, ConfirmExit
}

private static PropertiesConfiguration conf;
private static PropertiesConfiguration conf;

public static PropertiesConfiguration getConfig() {
if (conf != null) {
return conf;
}
Parameters params = new Parameters();
File propertiesFile = ConfigureUtil.getConfigureFile(CONFIG_FILE_NAME);
PropertiesBuilderParameters propertiesBuilderParameters = params.properties().setFile(propertiesFile)
.setEncoding("UTF-8").setListDelimiterHandler(new DefaultListDelimiterHandler(','))
.setThrowExceptionOnMissing(false);
ReloadingFileBasedConfigurationBuilder<PropertiesConfiguration> builder = new ReloadingFileBasedConfigurationBuilder<>(
PropertiesConfiguration.class).configure(propertiesBuilderParameters);
builder.setAutoSave(true);
try {
conf = builder.getConfiguration();
} catch (ConfigurationException e) {
e.printStackTrace();
}
return conf;
}
public static PropertiesConfiguration getConfig() {
if (conf != null) {
return conf;
}
Parameters params = new Parameters();
File propertiesFile = ConfigureUtil.getConfigureFile(CONFIG_FILE_NAME);
PropertiesBuilderParameters propertiesBuilderParameters = params.properties().setFile(propertiesFile)
.setEncoding("UTF-8").setListDelimiterHandler(new DefaultListDelimiterHandler(','))
.setThrowExceptionOnMissing(false);
ReloadingFileBasedConfigurationBuilder<PropertiesConfiguration> builder = new ReloadingFileBasedConfigurationBuilder<>(
PropertiesConfiguration.class).configure(propertiesBuilderParameters);
builder.setAutoSave(true);
try {
conf = builder.getConfiguration();
} catch (ConfigurationException e) {
e.printStackTrace();
}
return conf;
}

/**
* 修改配置,修改后的值将会自动保存
*/
public static void set(Keys key, Object value) {
getConfig().setProperty(key.name(), value);
}
/**
* 修改配置,修改后的值将会自动保存
*/
public static void set(Keys key, Object value) {
getConfig().setProperty(key.name(), value);
}

public static String get(Keys key, String def) {
Object value = getConfig().getProperty(key.name());
return value == null ? def : value.toString();
}
public static String get(Keys key, String def) {
Object value = getConfig().getProperty(key.name());
return value == null ? def : value.toString();
}

public static double getDouble(Keys key, double def) {
return NumberUtils.toDouble(get(key, null), def);
}
public static double getDouble(Keys key, double def) {
return NumberUtils.toDouble(get(key, null), def);
}

public static boolean getBoolean(Keys key, boolean def) {
return Boolean.parseBoolean(get(key, String.valueOf(def)));
}
public static boolean getBoolean(Keys key, boolean def) {
return Boolean.parseBoolean(get(key, String.valueOf(def)));
}
}
114 changes: 114 additions & 0 deletions core/src/main/java/com/tlcsdm/core/util/InterfaceScanner.java
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.");
}
}
46 changes: 24 additions & 22 deletions core/src/main/java/module-info.java
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;

}
Loading

0 comments on commit 2b2b9fa

Please sign in to comment.