spring reference(spring 溯源和设计哲学)
来源:
Spring 框架最开始的部分是由Rod Johnson于2000年为伦敦金融界提供独立咨询业务时写出来的。在《Expert One-On-One J2EE Development Without EJB》一书中,他进一步拓展了他的代码,以阐述“如何让应用程序能以超出当时大众所惯于接受的易用性和稳定性与J2EE平台上的不同组件合作”的观点。
一批自愿拓展Spring框架的程序开发人员组成了团队,2003年2月在Sourceforge上构建了一个项目。在Spring框架上工作了一年之后,这个团队在2004年3月发布了第一个版本(1.0)。这个版本之后,Spring框架在Java社区里变得异常流行,当然这也要部分的归功于它不错的文档功能和详尽的参考文献,特别是对于一个开源项目而言尤其如此。Spring框架的一个重要设计目标就是更容易地与已有的J2EE(现在称之为JavaEE或JEE)标准和商用工具整合。简单说来,Spring在最初的目标中(至少Rod大叔一开始是这么说的),并不是致力于打造又一个大而全的新框架。而是希望Spring框架就像一个大容器一样,能够快速方便地集成各种应用(牢记:不仅仅是Web应用,就算一个普通的Java应用也可以)中各种现有技术,对它们进行支持,让开发人员在实现过程中感觉就像使用简单JavaBean一样,在必要的时候还能轻松完成同类框架和工具的替换。而Spring达到这一目标的两大关键手段就是:控制反转/依赖注入(IOC/DI),和面向切面编程(AOP)。其中,IOC/DI是Spring最基本的底层;而AOP是Spring强大的亮点。它们也是我们一开始学习Spring的起点。
发展:
在诞生之初,Spring就是为了简化替代日益重量级的企业级Java技术。但随着时间的推移,JavaEE自身也在不断的演化,面向简单JavaBean模型、依赖注入、面向切面也都逐渐融入,这无疑是受到了Spring成功的启发。
在被模仿的同时,Spring并没有停下脚步。它继续在其它领域不断发展:移动开发,社交API集成、安全管理、NoSQL数据库、云计算和大数据等等都是它正在涉足和创新的领域,其前景更加广阔,甚至已经形成与传统的JavaEE平台分庭抗礼之势
设计理念:
Spring 为开发者提供的是一个一站式的轻量级应用开发框架和传统的J2EE开发相比,Spring支持POJO(普通的Java对象,不具有业务逻辑或者实体功能,作用是方便程序员使用数据库中的数据表)和使用JavaBean开发方式,使应用面向接口开发(体现其封装特性)充分支持OO(面向对象的设计方法)。
在应用开发中,往往会涉及复杂的对象耦合关系,通过Spring的IOC容器,可以对这些耦合关系实现一个文本化,外部化的工作(通过上下文文件实现其依赖反转,实际上是通过BeanDefinition这种数据结构对bean进行管理。)把依赖关系的管理从Java对象中解放出来,交给IOC容器来完成,从而完成了对象关系的解耦。原来的对象——对象关系,转化为对象——IOC容器——对象的关系。
Spring关心的是一些企业应用资源的使用,比如数据的持久化,数据集成,事务处理,消息中间件。
Spring体系的核心:IOC容器和AOP模块。一方面,通过IOC容器来管理POJO对象,以及它们相互之间的耦合关系。另一方面,可以通过AOP,以动态和非侵入的方式来增强服务的功能。
Spring的设计理念:面向接口开发而不是依赖于具体的产品实现,用户可以选择Hibernate作为ORM工具,也可以选择iBatis(ORM:对象映射关系,用来把对象模型表示的对象映射到基于SQL的关系模型数据库结构中去)。
整体结构:
Spring IOC:包含了最为基本的IOC容器BeanFactory的接口与实现。BeanFactory是一个接口(IOC容器),它有许多的实现类(简单工厂模式)
XmlBeanFactory:支持通过Xml文件配置bean的定义信息
SimpleJndiBeanFactory
StaticListableBeanFactory
除了像BeanFactory那样最基本的容器形态之外,Spring还设计了IOC容器的高级形态像ApplicationContext应用上下文供用户使用。当然使用ApplicationContext,本质上也是实现BeanFactory的接口方法,只不过ApplicationContext是更为高级的封装。
Spring AOP:Spring集成AspectJ作为AOP的一个特定实现。AOP框架作为Spring 集成其他模块的工具。比如对事务的处理,Spring AOP实现了一个完整的建立AOP代理对象,实现AOP拦截器,直至实现各种Advice通知的过程。
Spring MVC:这个模块是以DispatcherServlet为核心,实现了MVC模式,包括怎样与Web容器环境的集成,Web请求的拦截,分发,处理以及ModelAndView数据的返回。
Spring JDBC/Spring ORM:Spring对JDBC做了一层封装,使通过JDBC完成对数据库的操作变得更加简洁。Spring JDBC提供了JDBCTemplate作为模板类,封装了基本的数据库的操作方法。Spring还提供了许多对ORM工具的封装,这些封装包括了常用的ORM工具,如Hiberate,IBatis等。
Spring事务处理:Spring事务处理是一个通过Spring AOP实现自身功能增强的典型模块,Spring把在企业应用开发中事务处理的主要过程抽象出来,并且简洁地把通过AOP的切面增强实现了声明式事务处理的功能。
在Spring中,JavaEE的服务都被抽象到IOC容器中,并通过AOP进行有效的封装。因为依赖注入的特性,这些复杂的依赖关系的管理被反转并被交给容器,使复杂的依赖关系从应用中解救出来。