新增扫描注解

This commit is contained in:
yuye
2020-03-24 21:15:12 +08:00
parent b392f99dbf
commit cd0ac37f95
13 changed files with 66 additions and 25 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>com.github.yuyenews</groupId>
<artifactId>Mars</artifactId>
<version>3.0.13</version>
<version>3.0.15</version>
</parent>
<artifactId>mars-core</artifactId>
@@ -0,0 +1,10 @@
package com.mars.core.annotation;
import java.lang.annotation.*;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MarsScan {
String[] packageName();
}
@@ -1,5 +1,6 @@
package com.mars.core.load;
import com.alibaba.fastjson.JSON;
import com.mars.core.constant.MarsConstant;
import com.mars.core.constant.MarsSpace;
import com.mars.core.util.ReadClass;
@@ -23,29 +24,40 @@ public class LoadClass {
*
* @throws Exception 异常
*/
public static void scanClass(String packageName) throws Exception{
public static void scanClass(String[] packageName) throws Exception{
try {
Set<String> scanClassList = LoadHelper.getSacnClassList();
/* 扫描包下面的所有类 */
Set<String> classList = ReadClass.loadClassList(packageName);
Set<String> scanClassList = scanClassList(packageName);
/* 加载本地bean */
Set<String> navClassList = loadNativeClass();
/* 将框架自有的Bean和扫描出来的类合并到一个集合 */
scanClassList.addAll(classList);
scanClassList.addAll(navClassList);
/* 将扫描出来的类保存到内存中 */
marsSpace.setAttr(MarsConstant.SCAN_ALL_CLASS,scanClassList);
} catch (Exception e){
throw new Exception("扫描["+packageName+"]包下的类发生错误",e);
throw new Exception("扫描["+ JSON.toJSONString(packageName)+"]包下的类发生错误",e);
}
}
/**
* 扫描框架的类
* @param packageName 要扫描的包名
* @return 扫描出来的包
* @throws Exception 异常
*/
private static Set<String> scanClassList(String[] packageName) throws Exception {
Set<String> scanClassList = LoadHelper.getSacnClassList();
for(String pkName : packageName){
Set<String> classList = ReadClass.loadClassList(pkName);
scanClassList.addAll(classList);
}
return scanClassList;
}
/**
* 加载本地Class
*
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>Mars</artifactId>
<groupId>com.github.yuyenews</groupId>
<version>3.0.13</version>
<version>3.0.15</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mars-jdbc</artifactId>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>com.github.yuyenews</groupId>
<artifactId>Mars</artifactId>
<version>3.0.13</version>
<version>3.0.15</version>
</parent>
<artifactId>mars-mvc</artifactId>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>Mars</artifactId>
<groupId>com.github.yuyenews</groupId>
<version>3.0.13</version>
<version>3.0.15</version>
</parent>
<modelVersion>4.0.0</modelVersion>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>com.github.yuyenews</groupId>
<artifactId>Mars</artifactId>
<version>3.0.13</version>
<version>3.0.15</version>
</parent>
<artifactId>mars-server</artifactId>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>Mars</artifactId>
<groupId>com.github.yuyenews</groupId>
<version>3.0.13</version>
<version>3.0.15</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
@@ -1,5 +1,6 @@
package com.mars.start.startmap.impl;
import com.mars.core.annotation.MarsScan;
import com.mars.core.load.LoadClass;
import com.mars.start.startmap.StartMap;
import com.mars.start.startmap.StartParam;
@@ -11,13 +12,14 @@ public class StartLoadClass implements StartMap {
/**
* 扫描包
*
* @param startParam 参数
* @throws Exception 异常
*/
@Override
public void load(StartParam startParam) throws Exception {
/*获取要扫描的包*/
String className = getClassName(startParam);
String[] className = getClassName(startParam);
/* 获取此包下面的所有类(包括jar中的) */
LoadClass.scanClass(className);
@@ -25,19 +27,36 @@ public class StartLoadClass implements StartMap {
/**
* 截取main方法所在包名
*
* @param startParam 类
* @return 返回值
* @throws Exception 异常
*/
private String getClassName(StartParam startParam) throws Exception {
String className = startParam.getClazz().getName();
if(className.lastIndexOf(".") > 0){
className = className.substring(0,className.lastIndexOf("."));
private String[] getClassName(StartParam startParam) throws Exception {
Class<?> cls = startParam.getClazz();
String[] classNameList = null;
MarsScan marsScan = cls.getAnnotation(MarsScan.class);
if (marsScan != null) {
classNameList = marsScan.packageName();
} else {
String cName = cls.getName();
if (cName.lastIndexOf(".") > 0) {
classNameList = new String[1];
classNameList[0] = cName.substring(0, cName.lastIndexOf("."));
}
}
if(className.indexOf(".") < 0){
throw new Exception("启动服务的main方法所在的类,必须放在两层包名中,比如[com.mars,com.test]等,不允许放在[com,cn]等包中,更不允许放在包外面");
if(classNameList == null){
throw new Exception("请正确配置要扫描的包名");
}
return className;
for (String className : classNameList) {
if (className.indexOf(".") < 0) {
throw new Exception("Mars只可以扫描多层包名,比如[com.mars,com.test]等,无法扫描此包[" + className + "]");
}
}
return classNameList;
}
}
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>Mars</artifactId>
<groupId>com.github.yuyenews</groupId>
<version>3.0.13</version>
<version>3.0.15</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>Mars</artifactId>
<groupId>com.github.yuyenews</groupId>
<version>3.0.13</version>
<version>3.0.15</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>com.github.yuyenews</groupId>
<artifactId>Mars</artifactId>
<version>3.0.13</version>
<version>3.0.15</version>
</parent>
<artifactId>mars-tomcat</artifactId>
+1 -1
View File
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.yuyenews</groupId>
<artifactId>Mars</artifactId>
<version>3.0.13</version>
<version>3.0.15</version>
<packaging>pom</packaging>
<modules>
<module>mars-core</module>