1.spring是什么
- 轻量级(Lightweigt)容器。
- 实现IOC(Inversion of Control)容器和非侵入式(No intrusive)的框架。
- 提供AOP(Aspect-orientedprogramming)概念的实现方式。
- 提供对持久层(Persistence),事务(Transaction)的支持。
- 提供MVC WEB框架的实现。
- 对一些常用的企业级API提供一致的模型封装,是一个全方面的应用程序框架。
- 对于现存的各种框架(Struts,Hibernate等),Spring也提供了与它们相整合的方案。
2.Spring的初衷&目标
- Spring的目标是致力于全方位的简化Java开发
- J2EE开始应该更加简单。
- 使用接口而不是使用类,是更好的编程习惯。Spring将使用接口的复杂度几乎降低到了零。
- 为JavaBean提供了一个更好的应用配置框架。
- 更多地强调面向对象的设计,而不是现行的技术如J2EE。
- 尽量减少不必要的异常捕捉。
- 使应用程序更加容易测试。
- 可以令人方便愉快的使用Spring。
- 应用程序代码并不依赖于Spring APIs。
- Spring不和现有的解决方案竞争,而是致力于将它们融合在一起。
为了降低Java开发的复杂性,Spring采用了一下4种关键策略:
1. 基于POJO的轻量级和最小侵入性编程;
2. 通过依赖注入和面向接口实现松耦合;
3. 基于切面和惯例进行声明式编程;
4. 通过切面和模板减少样板式代码。
3.历史
Spring框架最开始的部分是由Rod Johnson于2000年为伦敦的金融界提供独立咨询业务时写出来
的。在《Java企业应用设计与开发的专家一对一》一书中,Rod进一步拓展了他的代码,以阐述“如
何让应用程序能以超出当时大众所惯于接受的易用性和稳定性与J2EE平台上的不同组件合作”的观
点。在2001年,web应用的主流编程模式为Java Servlet API和EJB。两者都是由太阳微系统公司与其
他一些开发商和利益团体提出的,并在Java业界里获得了广泛的共识。那些非Web的应用,比如用户
端的或批处理的应用,也可以基于能够提供所需功能的开源或商用工具和项目。一批自愿拓展Spring框架的程序开发员组成了团队,2003年2月在Sourceforge上构建了一个项
目。在Spring框架上工作了一年之后,这个团队在2004年3月发布了第一个版本(1.0)。这个版本
之后,Spring框架在Java社区里变得异常流行,部分的要归结于它好于一般水准的文档功能和参考
文献,特别是对于一个开源项目而言尤其如此。但是,Spring框架在2004年也备受批评,有时它也成为热烈争论的主题。Spring的第一个版本发
布时,许多程序员和领先的设计人员把它看作是远离传统编程模式的一步;特别是对于EJB而言尤其
如此。Spring框架的一个重要设计目标就是更容易地与已有的J2EE标准和商用工具整合。在很大程
度上,这个目标使得通过受争议的官方委员会控制的规范文档来定义功能变得可有可无。Spring框架使之前并不受欢迎的技术在短时间内迅速走红,最有名的例子就是反向控制(IOC)。>
2004年,Spring框架的采用率非常之高;通过推出自身的AOP(面向方向的编程),Spring使AOP
整体而言在Java社区里广受欢迎。2005年,Spring因具有里程碑意义的新的版本的推出,更多功能的添加,从而得到了比2004年更高
的采用率。2004年底创建的Spring论坛也对框架的推广而推波助澜。论坛对广大用户而言已经成为
最重要的信息和帮助的源泉。2005年,Spring框架的开发人员成立了自己的公司,来提供对Spring的商业支持,其中最显著的
就是与BEA的合作。2005年12月,第一个Spring会议在迈阿密举行,3天的课程吸引了300名开发人
员。2006年6月在安特卫普召开的会议有400多名开发人员。
4.模块(modules)
核心容器(Core Contatiner)
核心容器由
spring-core
,spring-beans
,spring-context
,spring-context-support
,和spring-expression
(Spring Expression Language) 模块组成。
spring-core
,spring-beans
提供框架最基础部分,包含IOC(Inversion of Control)的依赖注入功能。BeanFactory
实现了复杂工厂模式。
spring-context
建立在spring-core
和spring-beans
之上。它提供了访问框架中对象的方法。context模块继承了Beans的特征并增加了 国际化的支持,事件传播,资源加载,和语境的透明化,例如一个servlet容器。context模块还支持JavaEE的功能,比如EJB、JMX等。
spring-context-support
提供支持将常见的第三方类库集成到spring应用上下文中。
spring-expression
提供了强大的表达式语言来查询和处理对象图。这是一个扩展的统一表达式语言(unified EL)。语言支持设置和获取属性值,属性赋值,方法调用,访问数组的内容,收集和索引器、逻辑和算术运算,命名变量,并通过名字从Spring的IoC容器检索对象。它还支持列表选择和投影以及常见的列表聚合。