如何开发一个java开源框架-----Jvn框架之实现用注解代替配置文件

王朝学院·作者佚名  2016-05-28  
宽屏版  字体: |||超大  

如何开发一个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("\\",".");//添加进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.cnblogs.com/everxs/

永远的八哥...

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有