Spring**
大名鼎鼎的Spring框架,有人曾说2005年一片叫春之声,指的就是该框架。<br /> Spring起源于Rod Johnson的《Expert One-on-One J2EE Design and Development》一书。Rod Johnson认为,J2ee里面的那一套//尤其是ejb,太重了,对于单机的系统来说,没有必要使用那么复杂的东西 。于是就开始设计并引导Spring小组开发出这样一个构架,不能不说他是个天才,因为的的确确不是所有的系统都是跨多服务器的 。没有必要把一个简单的系统设计得那么复杂//天才的那几个共性又体现出来了,Spring从诞生之日起就是针对EJB的,力争在不少应用上取代EJB,而它也确实达到了这个目的 ,现在包括WebLogic等主流应用服务器还有主流IDE都开始逐渐接受该框架,并提供相应支持 ,提到Spring就不能不说**控制反转Ioc//Inversion of Control和依赖注射DI//Dependency Injection**** 。**<br />什么叫控制反转呢?套用好莱坞的一句名言就是:**你呆着别动,到时我会找你**。什么意思呢?就好比一个皇帝和太监 ,有一天皇帝想宠幸某个美女,于是跟太监说,今夜我要宠幸美女 ,皇帝往往不会告诉太监,今晚几点会回宫,会回哪张龙床,他只会告诉太监他要哪位美女,其它一切都交由太监去安排,到了晚上皇帝回宫时,自然会有美女出现在皇帝的龙床上,这就是控制反转。而把美女送到皇帝的寝宫里面去就是注射 ,太监就是是框架里面的注射控制器类**BeanFactory**,负责找到美女并送到龙床上去。整个后宫可以看成是Spring框架,美女就是**Spring**控制下的**JavaBean****。**而传统的模式就是一个饥渴男去找小姐出台 ,找领班,帮助给介绍一个云云,于是领班就开始给他张罗 ,介绍一个合适的给他,完事后,再把小姐还给领班,下次再来 。这个过程中,领班就是查询上下文Context,领班的一个职能就是给客户找到他们所要的小姐,这就是**lookup(****)**方法,领班手中的小姐名录就是**JNDI//Java Naming and Directory Interface****。**小姐就是EJB,饥渴男是客户端,青楼是EJB容器,看到区别了么?饥渴男去找小姐出台很麻烦,不仅得找,用完后还得把小姐给还回去,而皇帝爽翻了,什么都不用管,交给太监去处理,控制权转移到太监手中去了,而不是皇帝,必要时候由太监给注射进去就可以了 。看到Spring的美妙了吧**,****Spring还提供了与多个主流框架的支持,可以和其它开源框架集成 ****。**
设计模式
POJO** //Plain Old Java Object 就是传统的Java对象,也就是一个JavaBean,由虚拟机来掌握其生死 。常用的两个管理构架/规范是Spring和EJB容器**,命名由来是某人//名字我忘了,觉得我们使用了太多的规范,以至于我们都忘记了纯粹的java对象,以至于我们都忽略了它的存在,所以叫了这么一个名字 ,以唤醒人们的记忆,这个意义上来说EJB其实不能算是POJO,毕竟遵循了一堆的接口,但是不管怎样,接口归接口,还是没有继承类 ,没有被强加什么。//遵循可以写空方法假遵循,所以说还是POJO也对。但是由于这种东西缺乏管理,不象Servlet有专门的容器管理并继承了一定的类。而没有管理的对象在虚拟机中是很危险的,因为垃圾回收机制各个虚拟机不同。而且也不怎样,极有可能长时间不回收,这样在企业级的应用中呢 ,就有可能造成内存大量被占用从而死机,毫无疑问,这种机制需要优化 。这种优化就是通过EJB容器或者Spring构架来实现。这么做还有一个好处就是迫使程序员对每一个类做封装 ,强迫他做管理,以达到防止内存泄露的目的,内存泄露最经常出现的错误就是引用未释放,引用最典型体现在new这个关键字上,new得越多引用得越多,随着时间地增长,有可能导致循环,不停new new new new new…..其中哪怕只要有一个new处理不当,虚拟机无法回收内存,那就极有可能完蛋,而且这种小bug越是在大的项目越是难以找到,有可能因为一个人而影响整个项目组,所以不妨记住我的一条经验, 好的系统框架不应该在业务逻辑流程中出现new关键字**。现在不理解也无所谓,将来有一天会明白的 。
SOA** **面向服务的构架 ,不说太多,这个属于上上层建筑 。不过不妨记住我的一句话,可以帮助理解这个概念 ,面向什么就是对什么做封装 ,面向对象就是对对象做封装 ,面向服务类似,剩下的靠悟性 。
反射** 1.4新增功能,非常强大 通过反射,程序可以解析出类本身的属性也就是变量//注意这里说的属性不是.net里面的属性,我不喜欢微软造的新名词,乱。还有行为也就是方法,然后通过invoke()**方法调用该方法,甚至可以新增对象等,java首创,本是其它语言所没有的。后来被微软抄了去,利用该功能,开源框架广泛受益并大量采用,近乎疯狂地使用,具体就不说了,最后要指出的是,有一种说法是利用反射会降低效率 。在早期的时候的确是,现在不会了,放心使用 。
容器** **5.0以后的版本在J2SE中都出现了容器,各位甚至可以自己尝试用标准库去使用容器 。
推荐网站
www.javaeye.com //java视线论坛,Hibernate国内的权威
dev2dev.bea.com //bea的dev2dev社区,用WebLogic首选的好去处
www-128.ibm.com/developerworks //ibm developer works社区,ibm产品的老家
www.jdon.com //j道,Jboss国内相对讨论会多一点的地方,有自己的框架
www.matrix.org.cn //matrix,有自己的框架,很清新的论坛
jcp.org //JCP,前面说到过了
sourceforge.net //开源的东西几乎这里都可以找到,除java外还有游戏共享等
saloon.javaranch.com //我常去,人气不错
www.apache.org //阿帕奇老家
www.jboss.com //Jboss和Hibernate老家
www.springframework.org //Spring老家
www.wiki.org //非常好的百科站点,可惜国内被封,创始人加入了Eclipse zone
www.google.com //你要的这里有,不信?输入关键字再按一下那个靠左的白色按钮试试
书籍
《Thinking in Java》 //实话说,一般,尤其是翻译后的版本,原版还行
《Java教程》 //电子工业出版社出版的那本,上下册,很厚,但翻译得不错
《21天学通Java》 //入门极好,但是《21天学通j2ee》极烂,不要买
《Mastering EJB》 //翻译过的书质量我不清楚,估计不怎样,请看原版书籍
《精通Hibernate》 //看清楚作者,孙卫琴,其它人的别买
其它的可以不用了,网络上的远比书上来得多,来得好,虽然也来得杂
最后的建议** **
一,不要做一个浮躁的人
二,学好英语,很重要
三,阅读源代码和文档
四,共享源代码,不要做一个功利的人
五,热爱Java