`
zh_harry
  • 浏览: 102430 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
877aca81-daac-33c8-8bf9-3a886cebc6c3
自己动手写java 框架
浏览量:28408
社区版块
存档分类
最新评论

关于JAVA框架的思考

    博客分类:
  • JAVA
阅读更多
目前的JAVA 企业级开发框架,我们常用的大致包括IOC AOP MVC ORM框架
1、 IOC spring是一个非常棒的ico容器,其思想非常简单,用一个集合对象如MAP 来缓存对象(对象都是单例的),这也就是spring 所说容器内单例,它和java中的单例模式的区别在于单例模式是在当前java进程中保持单例,因为它有三个必要条件:private static 自身对象、private 构造方法、public static getInstance()方法,以保持在进程中单例,而spring只能保证在容器中单例,用户是可以手动再new出其他对象的。所以这部分如果为了简单可以不使用spring的ioc框架以单例模式替代,减少spring的jar包,缺点是可维护性和扩展性较差。或自己写一个ico容器以实现spring的ico功能。
2、aop aop的实质是动态代理模型,框架包括spring、AspectJ等,当然最行的是spring, spring有两种实现形式,一种是jdk的动态代理,一种是cglib字节码框架(比jdk的反射要快,其asm框架实现),典型的场景是数据库事务,个人感觉aop的应用其实可以去掉。可维护性并没有提高,反而变更复杂。aop事务是在threadlocal是以threadlocal为基础的。关于aop去或留希望各位讨论。
3、mvc框架 spring mvc struts2 这两个框架相比:spring mvc的思想还是比较先进的,因为struts2的action bean不是单例的,每次通过反射new出一个对象,性能会相对较低。而spring mvc controller是单例的,继承至servlet类(单例多纯种)。它的实现思想的是方法参数的注入。两个都支持模型驱动。spring mvc有一个缺点,注解的配置模型全部用的java反射。性能也会有影响。两者都支持注解,个人认为xml要好于注解,开发阶段注解要优于xml,因为方便,而维护起来可能会比较麻烦,尤其是对刚接手项目的新人。最好的方案是取两者之长,去其缺点,保留spring的单例通过方法注入,注入时将jdk反射去掉,换成asm的注入思想,以提高性能。
4、ORM框架 hibernate mybatis。hiberate是全自动的orm框架,优点是简单使用方便,但jar包很多,大数据SQL调优问题比较大。mybatis 由ibatis升级,半自动orm框架,需要手动写sql,优点是方便sql调试,缺点是对于简单的单表增删改也需要手动写SQL,比较麻烦。所以最好是结合两个框架的优点开发一个单表的增删改orm(不依赖SQL),复杂SQL可以直接通过JDBC这样可以提高性能。
13
10
分享到:
评论
46 楼 alexlx 2013-07-22  
框架始终都只是工具,开发出来是帮人解决问题的。
首先要明确了解框架能解决什么问题,然后再在实际工作中权衡采用或者不采用某种框架。
45 楼 windshome 2013-07-22  
其实说白了,最重要的是,负责人要有责任心、要不怕困难,要有长远的考虑,本着这样的精神来做设计和开发。
44 楼 zh_harry 2013-07-22  
windshome 写道
我觉得扯得太远了,没有那么大的目标,也不一定说全部都自己做,不用别人的框架,我的主张只是在你用别人的东西之前,把方方面面的事情想清楚了。

不仅仅是当前实现功能,还包括后期的改进完善、bug的修改,维护的成本和代价,框架出现问题你能否修改。


那句原则“没有免费的午餐”是非常睿智的,吃了免费的午餐,就别嫌不合乎自己的口味,营养单一;如果想吃丰盛的大餐,美味佳肴,需要耐心,需要代价。做一个产品或一个项目,根据需求和场景去衡量,到底怎么取舍,是拿现成的开源组件拼凑,还是自己从头做起,还是怎么样来搞,是需要平衡和妥协的。

再有,使用了开源的框架和组件,开始没有付代价,但是到后期维护、改进、bug修改时再付代价,挤牙膏的方式付代价,俗话“背着扛着一样沉”。不要有图便宜的思想,不要指望别人努力工作,解决你的问题,而你不需要付出任何代价!!!这是一个关键问题。




这就是五年和两年的区别!前期的规划,权衡和思考会对后期的开发和维护产生生很大影想,所以用一个框架的出发点不止是会用,能实现功能。要考虑的事情真的很多。回复越来越有质量了!
43 楼 windshome 2013-07-22  
我觉得扯得太远了,没有那么大的目标,也不一定说全部都自己做,不用别人的框架,我的主张只是在你用别人的东西之前,把方方面面的事情想清楚了。

不仅仅是当前实现功能,还包括后期的改进完善、bug的修改,维护的成本和代价,框架出现问题你能否修改。


那句原则“没有免费的午餐”是非常睿智的,吃了免费的午餐,就别嫌不合乎自己的口味,营养单一;如果想吃丰盛的大餐,美味佳肴,需要耐心,需要代价。做一个产品或一个项目,根据需求和场景去衡量,到底怎么取舍,是拿现成的开源组件拼凑,还是自己从头做起,还是怎么样来搞,是需要平衡和妥协的。

再有,使用了开源的框架和组件,开始没有付代价,但是到后期维护、改进、bug修改时再付代价,挤牙膏的方式付代价,俗话“背着扛着一样沉”。不要有图便宜的思想,不要指望别人努力工作,解决你的问题,而你不需要付出任何代价!!!这是一个关键问题。



42 楼 zh_harry 2013-07-21  
alvin198761 写道
别人的语言也没意思,咱自己写一个吧,来,扶清灭洋,走起
Leon.Wood 写道
zh_harry 写道
zh_harry 写道
alvin198761 写道
一群用框架的人早就了中国IT行业的技术现状,一批用windows的人,早就了中国对windows的依赖的现状,

我不用框架,不用第三方jar,java开发照样继续,看到讨论框架还争来争去,想问一句,咱能自己写个框架,然后讨论自己的好不好行不,你说的好不好,都是别人的东西,有意思吗?

已经写了呀,看我的博客,并且已经开源了http://lizhizhang.iteye.com/blog/1896545
大家拍砖
上面说得这些思想全包括了,还在升级中,希望大家关注...
也希望小编小这编文件也推荐到首页,绝对原创,没有一个jar,0框架开发,我很喜欢你所说的。
这个框架的名字我给他叫sparrow
麻省虽小,五脏俱全,其实中国就应该用自己的框架

再加一句,这么多人看过只有你提出这个问题,很棒!!

用别人的语言也没意思,咱自己写一个吧,来,扶清灭洋,走起

产生一个新的语言不是为了扶清灭洋,而是一个公司自己的业务需要,加上自己的技术积累,有这个能力了,在当前语言没法满足自己的要求下,开始做的,java也是因此产生的。国内技术能力不说低于美国,至少是低于 日本,韩国,印度,这些国家的,其主要原因不是人的问题,是制度早就的,上面层层转包,给下面一个很少的费用,老板想在很少的费用上面赚钱,就不得不加快时间,加快时间的最好办法就是用框架,用框架就导致了现在的现状,我的老板不一样,他常常说能自己实现,就不用别人的,不然我们的产品就别别人绑架了,出了问题我们搞不定,所以,我们不用别人的框架,少用第三方jar

这个说到点子上了
41 楼 alvin198761 2013-07-21  
别人的语言也没意思,咱自己写一个吧,来,扶清灭洋,走起
Leon.Wood 写道
zh_harry 写道
zh_harry 写道
alvin198761 写道
一群用框架的人早就了中国IT行业的技术现状,一批用windows的人,早就了中国对windows的依赖的现状,

我不用框架,不用第三方jar,java开发照样继续,看到讨论框架还争来争去,想问一句,咱能自己写个框架,然后讨论自己的好不好行不,你说的好不好,都是别人的东西,有意思吗?

已经写了呀,看我的博客,并且已经开源了http://lizhizhang.iteye.com/blog/1896545
大家拍砖
上面说得这些思想全包括了,还在升级中,希望大家关注...
也希望小编小这编文件也推荐到首页,绝对原创,没有一个jar,0框架开发,我很喜欢你所说的。
这个框架的名字我给他叫sparrow
麻省虽小,五脏俱全,其实中国就应该用自己的框架

再加一句,这么多人看过只有你提出这个问题,很棒!!

用别人的语言也没意思,咱自己写一个吧,来,扶清灭洋,走起

产生一个新的语言不是为了扶清灭洋,而是一个公司自己的业务需要,加上自己的技术积累,有这个能力了,在当前语言没法满足自己的要求下,开始做的,java也是因此产生的。国内技术能力不说低于美国,至少是低于 日本,韩国,印度,这些国家的,其主要原因不是人的问题,是制度早就的,上面层层转包,给下面一个很少的费用,老板想在很少的费用上面赚钱,就不得不加快时间,加快时间的最好办法就是用框架,用框架就导致了现在的现状,我的老板不一样,他常常说能自己实现,就不用别人的,不然我们的产品就别别人绑架了,出了问题我们搞不定,所以,我们不用别人的框架,少用第三方jar
40 楼 zh_harry 2013-07-21  
zhaomengbin 写道
struts2 的bean 也可以在spring配置为单例,性能你是怎么测出来的?

是可以,所有的都可以是单例,但我们不能那么做,单例的成员变量是共享的,是线程不安全的。servlet是单例多线程,因为他没有成员变量线程安全的。这是基础吧!
39 楼 zhaomengbin 2013-07-21  
struts2 的bean 也可以在spring配置为单例,性能你是怎么测出来的?
38 楼 zh_harry 2013-07-21  
疯子在思考系之IOC
http://lizhizhang.iteye.com/blog/1910976
疯子在思考系列会讲解sparrow框架的每一个点,各位关注
37 楼 wuchsh2013 2013-07-20  
你真是一个大牛
36 楼 zh_harry 2013-07-20  
windshome 写道
kentkwan 写道
感觉作者处于入门的级别。文中不难找出误导成分并缺乏佐证的观点。
例如:
1. 创建一个对象的时间开销其实可以忽略不算
2. spring对于bean管理的默认策略是singleton,但是也可以是prototype,并非作者所说的纯单例。
3. 反射的过程中开销最大的是获取method或者是获取field,如果进行反射的时候能把method和field进行缓存处理,反射的开销也是可以忽略不算。


我的看法:

(1)是使用单实例模式还是new,是由需求决定的,一个数据库连接池,从技术需求层面上看,是必须单实例的,能够再次被创建是违反业务约束和要求的;普通的对象,企图做成单实例,有什么价值?
(2)是使用new还是factory,差别不是多大,你要是有多态,打算把细节封装起来,就工厂模式吧
(3)缓存:大多数对象,缓存价值不大,除非第一你想避免多次查询数据库,第二数据库里的数据不会频繁变化,缓存中的和数据库里的有点差别也不大要紧;第三效率是非常关键的,这个时候可以考虑缓存
(3)现在版本的java,反射开销已经很小,即便你不会反射或者缓存反射的method和field,java里边API的东西很多也是在用反射。

这些都是对的,不错!
35 楼 windshome 2013-07-20  
kentkwan 写道
感觉作者处于入门的级别。文中不难找出误导成分并缺乏佐证的观点。
例如:
1. 创建一个对象的时间开销其实可以忽略不算
2. spring对于bean管理的默认策略是singleton,但是也可以是prototype,并非作者所说的纯单例。
3. 反射的过程中开销最大的是获取method或者是获取field,如果进行反射的时候能把method和field进行缓存处理,反射的开销也是可以忽略不算。


我的看法:

(1)是使用单实例模式还是new,是由需求决定的,一个数据库连接池,从技术需求层面上看,是必须单实例的,能够再次被创建是违反业务约束和要求的;普通的对象,企图做成单实例,有什么价值?
(2)是使用new还是factory,差别不是多大,你要是有多态,打算把细节封装起来,就工厂模式吧
(3)缓存:大多数对象,缓存价值不大,除非第一你想避免多次查询数据库,第二数据库里的数据不会频繁变化,缓存中的和数据库里的有点差别也不大要紧;第三效率是非常关键的,这个时候可以考虑缓存
(3)现在版本的java,反射开销已经很小,即便你不会反射或者缓存反射的method和field,java里边API的东西很多也是在用反射。
34 楼 zh_harry 2013-07-20  
关于框架的事情,我会抽时间一一在博客中讲解,希望喜欢学习框架设计和喜欢思考的同学一起拍砖
33 楼 zh_harry 2013-07-20  
witcheryne 写道
so ???
楼主的框架打算什么时候面世?
或者有什么实战指导型项目即将面世?

感谢您的关注
你说的这两件事都正在做
框架已经开源了。在googlecode里,博客也有介绍,但还没有demo
demo我会抽时间加,实践性项目也正在做,很快就要上线。欢迎常来!
32 楼 witcheryne 2013-07-20  
so ???
楼主的框架打算什么时候面世?
或者有什么实战指导型项目即将面世?
31 楼 zh_harry 2013-07-20  
kentkwan 写道
感觉作者处于入门的级别。文中不难找出误导成分并缺乏佐证的观点。
例如:
1. 创建一个对象的时间开销其实可以忽略不算
2. spring对于bean管理的默认策略是singleton,但是也可以是prototype,并非作者所说的纯单例。
3. 反射的过程中开销最大的是获取method或者是获取field,如果进行反射的时候能把method和field进行缓存处理,反射的开销也是可以忽略不算。

创建对象的开销与直接new会差很多的
spring有单例和非单例我想看这篇文章的人都知道,我只是举了单例的例子而已。
方法缓存可以缓存,但
invoke方法的执行仍和直接方法的执行差很多,这个可以用字节码处理,有兴趣看一下refectasm基于非常简单只有四个类。
我入了五年门了,还在入门,感谢多批评。
30 楼 kentkwan 2013-07-20  
感觉作者处于入门的级别。文中不难找出误导成分并缺乏佐证的观点。
例如:
1. 创建一个对象的时间开销其实可以忽略不算
2. spring对于bean管理的默认策略是singleton,但是也可以是prototype,并非作者所说的纯单例。
3. 反射的过程中开销最大的是获取method或者是获取field,如果进行反射的时候能把method和field进行缓存处理,反射的开销也是可以忽略不算。
29 楼 zh_harry 2013-07-20  
windshome 写道
如果开发团队,或者公司,缺乏下列这些人员或人才,只好使用这些框架,以图加快开发进程:

(1)概念的分析和设计人员

     从需求中分析中产品的核心本质,设计产品的概念体系,理顺各个概念的关系。

(2)核心架构人员

    根据概念,建立稳固的架构,清晰划分各个部分的关联关系和职责定义;能够根据这些特点,权衡利弊,采取最适合的技术选型。

(3)资深的实现者

    框架实现起来当然不容易,但是要想做出对一个产品适用的一个服务器框架、或者数据库连接池,还是没有那么困难的,而且,自己实现也是随着项目、产品的进展而不断成长完善的。

当然,即便有这样的人,使用开源框架也无可厚非---只要不依赖它们,离开他们就活不成就行。



中国很多都是拿来主意,你说的在项目中不断完善,我很赞同!
28 楼 windshome 2013-07-20  
如果开发团队,或者公司,缺乏下列这些人员或人才,只好使用这些框架,以图加快开发进程:

(1)概念的分析和设计人员

     从需求中分析中产品的核心本质,设计产品的概念体系,理顺各个概念的关系。

(2)核心架构人员

    根据概念,建立稳固的架构,清晰划分各个部分的关联关系和职责定义;能够根据这些特点,权衡利弊,采取最适合的技术选型。

(3)资深的实现者

    框架实现起来当然不容易,但是要想做出对一个产品适用的一个服务器框架、或者数据库连接池,还是没有那么困难的,而且,自己实现也是随着项目、产品的进展而不断成长完善的。

当然,即便有这样的人,使用开源框架也无可厚非---只要不依赖它们,离开他们就活不成就行。


27 楼 zhongmin2012 2013-07-20  
我觉得还是看公司文化,

相关推荐

    Java框架研发思考

    ### Java框架研发思考 #### 背景与动机 在软件工程领域,特别是在Java平台下进行应用开发时,框架的研发不仅是技术挑战的体现,更是对未来技术趋势的一种预测和引导。本文作者彭晨阳分享了他在开发Jdon框架过程中...

    Java框架研发思考.docx

    【Java框架研发思考】 本文由彭晨阳撰写,回顾了他开发Jdon框架的心路历程,分享了在Java开发中的经验和教训,对于Java开发者尤其是面试者具有一定的参考价值。Jdon框架的诞生源于对Web应用多层架构复杂性的反思,...

    【Java】Java集合框架思维导图。

    xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...

    关于Java框架Vert.x的几点思考.docx

    Java框架Vert.x是近年来在Java社区中备受关注的一个轻量级、高性能的应用平台,它基于全异步的Java服务器Netty,旨在解决传统Java框架在处理高并发、低延迟场景下的性能瓶颈。本文将深入探讨Vert.x的核心特性和优势...

    JAVA集合框架学习思考+总结

    JAVA集合框架,java框架总结,java集合框架,java集合框架学习,java集合框架类

    一个Java框架引发的思考:语言、框架、范式转换和软件生产力

    标题中的“一个Java框架引发的思考:语言、框架、范式转换和软件生产力”提示了本文将探讨一个特定的Java框架,并由此引申出关于编程语言、开发框架、编程范式以及它们如何影响软件开发效率的主题。从描述中提供的...

    Java mvc 框架例子

    **Java MVC 框架实例解析** 在软件开发中,Model-View-Controller(MVC)模式是一种常用的设计模式,尤其在Web应用中被广泛采用。这个Java MVC框架的例子为我们提供了一个直观的学习平台,帮助初学者理解MVC的运作...

    基于SSM框架的Java Web开发课程教学中的几点思考.pdf

    本文主要探讨了在基于SSM(Spring+Spring MVC+MyBatis)框架的Java Web开发课程教学中出现的问题,并提出了相应的改进措施。以下是详细的知识点总结: 1. SSM框架介绍: SSM框架是目前Java Web开发中广泛使用的一种...

    java 编程入门思考

    引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 ...1.11 Java和因特网 ...1.13 Java还是C++?...附录E 关于垃圾收集的一些话 附录F 推荐读物

    java思考

    如果这是一个文本文件,那么它可能包含了博主对于Java语言的深入见解,包括但不限于类和对象、封装、继承、多态等面向对象特性,也可能是关于异常处理、集合框架、IO流、线程并发、反射、泛型、注解等方面的讨论。...

    java基础知识思考题+答案(个人整理)

    ### Java基础知识思考题详解 #### 1. 缩写JDK的含义是什么? JDK,全称Java Development Kit,即Java开发工具包。它是Java软件开发的基础,包含了编写、编译和运行Java程序所需的所有工具。JDK不仅包括Java编译器...

    java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB.zip

    关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业...

    JAVA SMART系统-系统框架设计与开发(源代码+论文)(1).zip

    《JAVA SMART系统-系统框架设计与开发》是一个深入探讨Java技术在构建智能系统中的应用的资源包,包含源代码和相关论文。这个压缩包旨在帮助开发者理解和实践如何使用Java技术来构建高效、灵活且可扩展的系统框架。...

    关于java中对象属性值的校验的思考

    Hibernate Validator是一个流行的Java Bean校验框架,它支持JSR-303和JSR-349标准。通过在属性上定义如`@NotNull`、`@Min`、`@Max`等注解,可以自动进行数据校验。例如: ```java public class User { @NotNull ...

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集.zip

    关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业...

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业...

    Java程序设计教程,电子教案,实例源程序,思考练习参考答案

    12. **Java EE**:对于进阶学习,Java Enterprise Edition(Java EE)提供了服务器端开发的框架,如Servlet、JSP、EJB等,用于构建分布式应用。 13. **实例源程序**:这些实例程序将帮助你理解理论知识的实际应用,...

    java面试笔试资料Java经典项目集锦java笔试题大集合及答案题库java笔试题汇总资料个合集(188).zip

    Java框架研发思考.docx Java程序员们最常犯的10个错误.docx java程序员的就业指导(重点).docx Java程序员面试宝典 .pdf java笔试题大集合及答案 Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc Java面试文档...

    对Java的思考(Thinking in Java) Java入门 java与C++对比 深入浅出

    本书通过对比Java和C++,使读者能够更好地理解Java的独特之处,并为初学者提供了一个逐步学习Java的框架。 第1章"对象入门"探讨了面向对象编程的基本原理,包括抽象、接口、隐藏实现、继承、多态以及异常处理。作者...

    [探秘Java:如何像计算机科学家一样思考].(唐尼).张平.扫描版.pdf

    《探秘Java:如何像计算机科学家一样思考》这本书由唐尼撰写,张平翻译,旨在帮助读者以计算机科学家的视角理解和掌握Java编程语言。通过深入阅读这本书,我们可以挖掘出一系列重要的Java编程和计算机科学思维的知识...

Global site tag (gtag.js) - Google Analytics