struts, spring, hibernate, freemarker的使用体会小结

语言这个东西,长时间不摸就是会忘,你会的技术越多,忘的也就越多。所以要勤写博客,做好烂笔头。

web开发这一块,我心中理想的开发组合是html+javascript+python+c。其中主体是javascript和c,前者是做RIA的主力,后者用来快速成型,而且有cpython这样功力不差的解释器以及五花八门的类库可以解决80%问题。剩下20%吃速度的需求都用c编写好动态链接库,然后使用python的ctype或者其它方法调用就好啦(这里只是说开发语言的选择)

至于java这个东西呢,哎……总有点不给力的感觉,毕竟是强类型语言,转换来转换去,看着乱飞的范型心中就无法平静。而且还不知到oracle老大哥心底到底在想什么,是拿java老实做IT服务,还是只作为专利战的武器……废话太多了,凭着有点记忆,赶紧记一下java这几个框架的心得。

首先说spring

spring中最重要的是IoC控制反转了。简单的说,就是如果有两个模块AB,当A要用B时,A就要在自己的代码里面写上B的名字,详细的过程。可是这样就造成了强耦合,万一B改动了,这边也要改,麻烦。所以就把A和B通通都交给spring管理,spring看到有合适的B就把一个B生成,发给A(DI依赖注入)。A和B都控制不了将来的事,这都靠spring调度,A和B只提需求。这都是通过反射实现的。

spring的AOP是面向切面编程,就是把一个函数调用的一前一后包裹起来,有点像python的装饰器。这其实也是装饰器的设计模式,不过觉得java里好麻烦,不知道是怎么实现的。

还有,spring一般作为框架的中心,配其它框架一起使用。

其次是freemarker

回想起当年教我组的女生freemarker:因为没有编程基础,所以她上来就直接想往jsp里嵌代码,被我及时制止,赶紧教了freemarker……她当时大惑不解,说为什么要这么麻烦。我就只好写一个个样例程序,给她演示如果不用freemarker,代码未来会演化成什么样……

freemarker的好处就是无法运行java代码,这实在是太好了。

freemarker的坏处就是变量不赋值就要抛出异常,YYD,if满天非,丑死了,都快疯了……

然后生成了静态页面后,如果改了模板,一定要重新生成静态页面,不然就悲剧了

还一个不好就是freemarker里面的key必须是string……

然后是struts2

呃,其实我不怎么看好struts2,因为在我眼里只会struts两个功能:一个是MVC框架,一个是各种tag……struts2的MVC首先是有一个struts-config.xml的文件,里面配了各种url跳转到哪些地方。它的controller是ActionServlet,负责读取这个文件。struts2的标签库我是不用的,感觉虽然方便,但是怕扰乱布局,怕跨浏览器支持问题(?可能不对)。还有就是觉得springmvc就够用了,没必要再引一个struts2,怕麻烦。因为这两点,所以不怎么看好struts2……(struts2的拦截器interceptor感觉也和spring的aop重叠,记住DRY)

最后是hibernate和ibatis

第一反应就是可怕的ORM,以及更可怕的HQL……

觉得hibernate的精髓在于缓存。一级缓存在内存,缓存事务且永不过期;二级缓存可在内存、硬盘,缓存不常用且不怎么并发的类的实例,比如select*fromtable中所有的对象,都按照id缓存。hibernate还有按查询语句缓存等,这都是数据缓存和事务缓存了,作用还是蛮大的(最直接的应该是页面缓存)

其实hibernate我也不是很清楚,为什么说一次会查处很多很多没必要的数据,所以还亡羊补牢似的弄了一个延迟加载……

我觉得ORM这个东西轻量级就好了,尽量每次都是对单表的ORM操作,如果有级联、join的话就用自己手写的select,然后把数据集包装成一个arraylist<Map<string,object>>不也挺好?之前我在项目里就这样干的(反射完成ORM,把级联select全部持久化到硬盘),还是比较爽的。

hibernate在面向对象编程这方面是太偏执了,java可以OOP,hibernate也可以OOP,但广大的RDMS老人家们可不是都是源自OOP思想设计的。如果是面向对象数据库,搞不好会好多了吧?

ibatis我很喜欢,直接把sql语句写配置文里,好查也好管,不错。

最后一句,互联网应用以查询为主,谁能应付高磁盘I/O谁就能胜出。这里我看好列存储然后是KV存储数据库

相关推荐