长沙北大青鸟大计教育
在线测试

谈一谈快速构建Java Web开发框架

发布时间:2013-04-29

  我在我们应该怎样看待框架 中,实现了一个JDBC版的Base类,和一个Hibernate版的Base类,取模仿RoR的ActiveRecord,这样我们编程的时候,只需要实现一个Base的子类,就可以完成CRUD了。

  我的毕设题目是与Rest ,更准确说是与ROA有关的,另外就是在看Spring MVC对于惯例优先 (Convention over Configuration,CoC)原则的实现。

  Web架构的四个元素

  无论是Rails还是Spring MVC都是MVC实现,因此我的研究也肯定是基于MVC模式的。那么分别来关注M,V和C,另外就是将url和C进行映射的Router(或者说是Struts里的映射文件)。

  首先是M,我不想自己编M,那就自动生成,怎么才能自动生成呢,根据数据库自动生成,而且我生成要是一个ActiveRecord模式的类。所以不是像过去弄个HashMap就能混过去了。之后就是看了ASM3.1和ClassLoader的知识,发现这是可以实现的。如下:

  先整个测试:

  @Test publicvoidgerneratorClass(){ try{ Mapfields=newHashMap();fields.put("id",1l);fields.put("name","wanxing");EntityGernerator.generateEntity("Student",fields);EntityGernerator.invoke("add");}catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace();} }public void gerneratorClass() { try { Map fields=new HashMap();fields.put("id", 1l);fields.put("name", "wanxing");EntityGernerator.generateEntity("Student",fields );EntityGernerator.invoke("add");} catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace();}这块的实现我想了一下,EntityGernerator的generateEntity方法到底只是创建一个class还是连同实例化对象,而其还有invoke方法,这看上去不太对,嗯,它应该是只生成class就结束使命了。不过以后再迭代吧。

  实现的代码很简单,就是利用了ASM3.1,就搞定了。有两点需要声明:

  1、可以按需要设定生成类的父类

  2、只能创建类属性,不能创建方法,因为方法的实现太复杂,用JVM指令写会死人,不如转向动态语言了,而且它继承了有用的父类,就已经完成了自己的使命了。

  V和C都可以用通用的,就像用通用DAO一样。关于V有个特别之处,那就是FrontController,它来调配各个Controller,依照URI和Controller的Mapping,这符合Roy Fielding博士对于资源的定义:资源是 一种概念上的映射 ——服务器接收到标识符(标识这个映射),将它应用于当前的映射实现(mapping implementation,通常是与特定集合相关的树的深度遍历和/或哈希表的组合)上,以发现当前负责处理该资源的处理器实现 ,然后处理器实现基于请求的内容选择适当的动作+响应 .在RoR里这叫做Router.另外V中可以根据HTTP请求返回适当的Presentation.

  REST与CoC

在线申请

北大青鸟免费试听课程

 我已同意《隐私政策说明》
马上申请

学校地址: 长沙市天心区团结路6号

报名热线: 4008-0731-86 / 0731-82186801

Copyright © 2006 北大青鸟长沙大计教育
长沙市岳麓区大计职业技能培训学校有限公司版权所有

湘ICP备14017520号-3