1.1、spring 设计伊始
spring是为了解决企业级应用开发的复杂性而设计的,它可以做很多事情。但归根到底支撑spring的仅仅是少许基本理论。而所有的这些基本理念都可以追溯到一个最根本的使命:简化开发。
而spring立志于简化java开发,对此他采用了四个关键策略:
1):基于pojo的轻量级和最小侵入性编程;
2):通过依赖注入和面向接口的松耦合;
3):基于切面和惯性进行声明式的编程;
4):通过切面和模板减少样板式代码;
简而言之:主要通过面向bean,依赖注入以及面向切面这三种方式来达成。
1.2、面向bean
spring 是面向bean的编程(Bean Oriented Programming,BOP)bean在spring中才是真正的主角。Bean在spring的作用就想Object对OOP的意义一样,spring中没有Bean也就没有spring存在的意思。spring提供了IOC容器通过配置文件或者注解的方式来管理对象之间的依赖关系。
控制反转:(其中最常见的方式叫做依赖注入(Dependency In Jection,DI),还有一种方式叫做依赖查找(Dependency Lookup,DL),他是在c++,php,.net上应用是最早的。但依赖查询使用频率过低,不久就被移除了。)所以在spring中控制反转也被称为依赖注入,它的基本概念:不创建对象,但是描述创建他们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述那一个逐渐需要那一项服务。容器(在spring框架中是IOC容器)负责讲这些联系在一起。
在典型的IOC场景中,容器创建了所有对象,并设置必要的属性将他们连接在一起,决定什么时间去调用。
1.3、依赖注入
Spring 设计的核心org.springframework.beans包(架构核心是org.springframework.core包),她的设计目标是与javaBean组件一起使用。这个包通常不是有用户直接使用,而是由服务器将其用作其他多数功能的底层中介。下一个最高级抽象是BeanFactory接口,他是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory也可以管理对象之间的关系。
BeanFactory 支持两个对象模型
1):单例:模型提供了具有特定名称的对象的共享实例,可以在查询时对起进行检索。Singleton是磨人的也是最常用的对象模型。对于无状态服务对象很理想。
2):原型:模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型最适合。
bean工厂的概念是Spring作为IOC容器的基础。IOC浙江处理事情的责任从应用程序代码转移到框架。
1.4、面向切面
面向切面编程,aop,是一种编程思想,它允许程序员对横切关注点或者横切典型的职责分界线的行为(例如日志和事物管理)进行模块化。aop的核心构造时切面,它将那些影响多个类的行为封装到可重用的模块中。
aop和ioc是补充性的技术,他们都运用模块化方式解决企业应用程序开发中的复杂问题。在典型的面向对象开发方式中,可能要将日子记录语句放在所有方法和java类中才能实现日志功能。在aop方式中,可以反过来讲日志服务模块化,并以声明的方式将他们应用到需要日志的组件上。当然,优势就是java类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用spring aop先写的应用代码是松耦合的。
aop的功能完全集成到了spring事物管理,日志和其他各种特性的上下文中。
2、俯瞰Spring架构设计
如果你想加入spring源码的学习,笔者的建议是从spring-core入手,其次是spring-beans和spring-aop,随后是spring-context,再其次是spring-tx和spring-orm,最后是spring-web和其他部分。
2.1、常用的设计模式
代理模式:1)、事情必须做,而自己没有时间做或者不想做 2)、持有被代理对象的应用
静态代理、动态代理、jdk动态代理、CGLib动态代理
工厂模式:保证从系统启动到系统停止,全过程只会产生一个实例。
委派模式:类似于中介的功能(委托机制);只有被委托人的引用。
策略模式 :过程不同,但是结果一样
原型模式: 过程相同,但是结果不一样。或者叫模板模式
2.2、spring体系结构
图中包含了 Spring 框架的所有模块,这些模块可以满足一切企业级应用开发的需求,在开发过程中可以根据需求有选择性地使用所需要的模块。下面分别对这些模块的作用进行简单介绍。
1、Data Access/Integration(数据访问/集成)
数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。
2、web 模块
Spring 的 Web 层包括 Web、Servlet、Struts 和 Portlet 组件,具体介绍如下。
3. Core Container(核心容器)
Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 Expression Language 表达式语言模块组成,具体介绍如下。
4. 其他模块
Spring的其他模块还有 AOP、Aspects、Instrumentation 以及 Test 模块,具体介绍如下。