国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何開發一個java開源框架-----Jvn框架之實現用注解代替配置文件

2019-11-15 00:35:13
字體:
來源:轉載
供稿:網友
如何開發一個java開源框架-----Jvn框架之實現用注解代替配置文件

本次博客講的內容:

場景:在我們使用很多框架的時候,慢慢會發現寫配置文件很煩,比如寫一個小小的功能都要寫幾個配置文件。

對于這一類問題,所以很多框架都出現了注解這一功能,那到底如何用注解代替配置文件呢?

   今天我們要做的是,掃描Class后找到我們所有Controller類,接下來我們就來討論一下這個問題。

解決思路:

首先我們回想一下SPRing的做法,Spring在使用注解的使用,必須在配置文件(這里指的是主配置文件)里面寫上一句ScanClass的話,

這句話代表的是啟動掃描,然后會讓你告訴他掃描的路徑是哪個,于是我們的思路有了,我們要做到用注解代替配置文件,那也一樣要做掃描

   這樣一件事情。完成步奏如下:

   第一步:先創建 @Controller這個注解,用來標識是否屬于Controller類,屬性space()表示訪問的路徑。

第二步:掃描 WebRoot/WEB-INF/classes/下面的所有文件,因為在Web標準里面Classes放的路徑。

第三步:過濾掉不是以.class結尾的文件;

   第四步:把“/”換成 “.”。例如 把 com/everxs/JvnConfig.class 轉成 com.everxs.JvnConfig.class

   第五步:判斷該類是否被 @Controller注解,如果是,則屬于Controller.添加進map里面保存起來。

做完了以上的步驟,我們就可以拿到所有Controller類了。

代碼示例:

1,找出指定路徑下的所有文件的文件名

/** * 返回路徑下的所有file,并加入list * @return */public static List<String> listFileAbsolutePath(String filePath,List<String> list){File root = new File(filePath);    File[] files = root.listFiles();    for(File file:files){          if(file.isDirectory()){      /*       * 遞歸調用       */     listFileAbsolutePath(file.getAbsolutePath(),list);     }else{     list.add(file.getAbsolutePath());     }         }    return list;}

  

2,過濾掉不是以.class結尾的,并用“.”替換掉"/",

/** * 返回路徑下的所有file,并加入list * @return */public static List<String> listClassFileAbsolutePath(String filePath){List<String> list = new ArrayList<String>();List<String> classList = new ArrayList<String>();listFileAbsolutePath(filePath, list);for(String s : list){//如果是.class結尾的文件,則為class文件if(s.endsWith(".class")){//s = s.substring(filePath.length());String ss = s.substring(filePath.length()-1);//獲取全類名稱  把 com/everxs/JvnConfig 換成 com.everxs.JvnConfigString prefix = ss.substring(0,ss.length()-6).replace("http://",".");//添加進listclassList.add(prefix);}}    return classList;}

3,找出被@Controller注解的類,保存在map里面

/** * 掃描類 * @author Administrator * */public class ScanKit {public static void scanClass(Constant constant){//拿到classes絕對路勁String path = ScanKit.class.getClassLoader().getResource("").getPath();//得到類的全名稱  例如: con.everxs.test.TestController.classList<String> listClass= FileKit.listClassFileAbsolutePath(path);for(String clazzStr : listClass){try {//找到這個類全名稱的ClassClass clazz = Class.forName(clazzStr);if(clazz!=null){Controller controller= (Controller) clazz.getAnnotation(Controller.class);if(controller!=null){constant.setRoute(controller.space(), clazz);}}} catch (Exception e) {System.out.println("找不到類文件");}}}}

  

4,在啟動的時候啟動掃描

/** * 掃描所有class */public void sacnClass(){ScanKit.scanClass(CONSTANT);}

5,測試

@Controller(space = "/pile")public class PileController extends JvnController{public void add(){renderString("add方法");}public void delete(){renderString("delete方法");}}

總結:

這樣就完成了我們用注解代替配置文件的過程了。

關于Jvn:

    框架命名為Jvn,博客里有連續的開發視頻,每一篇博文都是一個知識點,關于框架的介紹和學習,可以從我博客第一講開始看起;

    本次內容的源碼與視頻下載地址:http://pan.baidu.com/s/1mgIKhXe

    Jvn框架QQ交流群:399603805

    博客首頁:http://www.survivalescaperooms.com/everxs/

    永遠的八哥...

   


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 萨迦县| 都兰县| 长兴县| 台北县| 厦门市| 嘉兴市| 济宁市| 雷波县| 开鲁县| 靖安县| 江油市| 玛沁县| 丰原市| 清丰县| 香格里拉县| 南丹县| 谢通门县| 湘西| 兰坪| 济源市| 仲巴县| 彭山县| 云和县| 太谷县| 东山县| 肇庆市| 苏州市| 平江县| 明星| 嘉荫县| 莱西市| 福建省| 奉化市| 沂水县| 汝阳县| 潼关县| 承德县| 永泰县| 樟树市| 灌云县| 灌云县|