Skip to content

Commit 736e648

Browse files
author
magiclu550
committed
[JSMOD@2_495_COMMIT] Util
1 parent cf3cd47 commit 736e648

14 files changed

Lines changed: 367 additions & 389 deletions

File tree

JSMod2Core/src/main/java/cn/jsmod2/core/plugin/BeanRegister.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

JSMod2Core/src/main/java/cn/jsmod2/core/plugin/PluginClassLoader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ public Plugin loadPlugin(File jar) {
117117
continue;
118118
}
119119
Class<?> pluginClass = classLoader.loadClass(mainName);
120-
SpringbootLoader.loadBean(pluginClass);
121120
Main main = pluginClass.getAnnotation(Main.class);
122121
if(main!=null){
123122
PluginFileVO vo = new PluginFileVO(main.name(),pluginClass.getName(),main.description(),main.version());
@@ -180,6 +179,7 @@ public Plugin loadPluginInfo(Object plugin,PluginFileVO vo,JarFile jarFile,URLCl
180179
String name = entry.getName();
181180
if(name.endsWith(".class")){
182181
Class<?> clz = loader.loadClass(name.substring(0,name.lastIndexOf(".")).replace("/","."));
182+
SpringContextUtil.loadBean(clz);
183183
if(register.command()) {
184184
if (mostSuperClass(clz).equals(NativeCommand.class) && !exclusionsCommand.contains(clz)) {
185185
Object obj = clz.getConstructor(Plugin.class).newInstance(pluginObject);
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package cn.jsmod2.core.plugin;
2+
3+
4+
import cn.jsmod2.core.utils.Utils;
5+
import org.apache.commons.lang3.StringUtils;
6+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
7+
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
8+
import org.springframework.context.ApplicationContext;
9+
import org.springframework.context.ConfigurableApplicationContext;
10+
import org.springframework.stereotype.Component;
11+
import org.springframework.stereotype.Controller;
12+
import org.springframework.stereotype.Repository;
13+
import org.springframework.stereotype.Service;
14+
import org.springframework.util.ReflectionUtils;
15+
import org.springframework.web.bind.annotation.RequestMapping;
16+
import org.springframework.web.bind.annotation.RestController;
17+
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
18+
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
19+
20+
import java.lang.reflect.Method;
21+
import java.lang.reflect.Modifier;
22+
23+
public class SpringContextUtil {
24+
25+
private static ApplicationContext applicationContext;
26+
27+
public static void setApplicationContext(ApplicationContext applicationContext) {
28+
SpringContextUtil.applicationContext = applicationContext;
29+
}
30+
31+
public static ApplicationContext getApplicationContext() {
32+
return applicationContext;
33+
}
34+
35+
public static void loadBean(Class clz){
36+
if(isSpringBean(clz)){
37+
String beanName = StringUtils.uncapitalize(clz.getSimpleName());
38+
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) SpringContextUtil.getApplicationContext();
39+
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory)configurableApplicationContext.getBeanFactory();
40+
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clz);
41+
defaultListableBeanFactory.registerBeanDefinition(beanName, beanDefinitionBuilder.getRawBeanDefinition());
42+
RequestMappingHandlerMapping mapping = configurableApplicationContext.getBean(RequestMappingHandlerMapping.class);
43+
Method method = ReflectionUtils.findMethod(RequestMappingHandlerMapping.class,"getMappingForMethod",Method.class,Class.class);
44+
method.setAccessible(true);
45+
Method[] methods = clz.getDeclaredMethods();
46+
for(Method m:methods){
47+
//RequestMapping("/aa")+RequestMapping("/name");
48+
RequestMapping rm = m.getAnnotation(RequestMapping.class);
49+
String[] paths = rm.value();
50+
for(String path:paths) {
51+
try {
52+
RequestMappingInfo mappingInfo = (RequestMappingInfo) method.invoke(mapping, m, path);
53+
mapping.registerMapping(mappingInfo, configurableApplicationContext.getBean(beanName), m);
54+
}catch (Exception e){
55+
Utils.printException(e);
56+
}
57+
}
58+
}
59+
60+
}
61+
}
62+
63+
public static boolean isSpringBean(Class clz){
64+
if(clz == null)return false;
65+
if(clz.isInterface())return false;
66+
if(Modifier.isAbstract(clz.getModifiers()))return false;
67+
if (clz.getAnnotation(Controller.class)!=null)return true;
68+
if(clz.getAnnotation(RestController.class)!=null)return true;
69+
if(clz.getAnnotation(Component.class)!=null)return true;
70+
if(clz.getAnnotation(Repository.class)!=null)return true;
71+
if(clz.getAnnotation(Service.class)!=null)return true;
72+
return false;
73+
}
74+
75+
}

JSMod2Core/src/main/java/cn/jsmod2/core/plugin/SpringbootLoader.java

Lines changed: 0 additions & 66 deletions
This file was deleted.

JSMod2Starter/src/main/java/cn/jsmod2/ServerStarter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import cn.jsmod2.core.Application;
44
import cn.jsmod2.core.annotations.ServerApplication;
55
import cn.jsmod2.core.log.ServerLogger;
6+
import cn.jsmod2.core.plugin.SpringContextUtil;
67
import cn.jsmod2.core.utils.Utils;
78

89
import java.util.concurrent.CountDownLatch;
@@ -14,7 +15,7 @@ public void start(String[] args){
1415
Utils.TryCatch(()->{
1516
CountDownLatch latch = new CountDownLatch(1);
1617
new Thread(()->{
17-
Starter.run(args);
18+
SpringContextUtil.setApplicationContext(Starter.run(args));
1819
latch.countDown();
1920
}).start();
2021
latch.await();

JSMod2Starter/src/main/resources/application.properties

Lines changed: 0 additions & 3 deletions
This file was deleted.

JSMod2Starter/src/main/resources/ui/start.fxml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
!author MagicLu550
66
-->
77

8-
<?import java.lang.*?>
8+
99
<?import javafx.scene.control.*?>
1010
<?import javafx.scene.layout.*?>
1111

0 commit comments

Comments
 (0)