Spring工作原理
一、Spring基本概念
1、Spring是什么?
1)Spring是一种多层的J2EE应用程序框架,其核心就是提供一种新的机制管理业务对象及其依赖关系;
2)spring是容器框架,创建bean,维护bean之间的关系;
3)spring可以管理web层,持久层,业务层,dao层,service层等,spring可以配置各个层的组件,并且维护各个层的关系。
2、Spring的核心及其组成
1)Spring Core 核心容器
是Spring框架最基础的部分,提供了依赖注入(DI,Dependency Injection)特征来实现容器对Bean的管理。最基本的概念是BeanFactory,它是任何Spring应用的核心。BeanFactory是工厂模式的一个实现,它使用IoC将应用配置和依赖说明从实际的应用代码中分离出来。
2)Context 应用上下文
是一个配置文件,BeanFactory使Spring成为容器,而上下文模块使它成为框架。该模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持。
3)AOP 面向切面编程
其提供了对面向切面编程的丰富支持。
4)JDBC抽象和DAO模块
JDBC经常导致大量的重复代码,比如连接、创建、处理、关闭,而Spring的JDBC和DAO模块抽取了这些重复代码,因此用户可以保持数据库访问代码简洁,并且可以防止因关闭数据库资源失败而引起的问题。使用了Spring的AOP模块为Spring应用中的对象提供了事物管理服务。
5)对象/关系映射集成模块
Spring提供了ORM模块。Spring并不试图实现它自己的ORM解决方案,而是为几种流行的ORM框架提供了集成方案。Spring的事物管理支持ORM与JDBC。
6)Spring的Web模块
其建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。还提供了一些面向服务支持,也提供了Spring和其它Web框架的集成,比如Struts、Mybatis。
7)Spring的MVC框架
功能全面,可利用Spring的任何其它服务,其使用IoC对控制逻辑和业务对象提供了完全的分离。
二、Spring特点
1、轻量级:轻量级是针对重量级容器(EJB)来说的,Spring的核心包就不到1M大小,而使用Spring的核心包所需的资源也很小,所以可以在小型设备中使用。
2、非入侵式:Spring目标是一个非入侵式的服务框架。原因是所有框架都是提供大量的功能供用户去使用,从而简化开发时间和成本,但由于大量的使用了框架的API,使应用程序和框架发生了大量的依赖性,无法从框架中独立出来,更加无法使程序组件在其他程序中使用。
3、容器:
1)Spring提供了容器功能,容器可以管理对象的生命周期、对象与对象间的关系、我们可以通过编写XML来设置对象关系和初始值,这样容器在启动之后,所有的对象都直接可以使用,不用编写任何编码来产生对象。
2)Spring有两种不同的容器:
. Bean工厂(org.springframework.beans.factory.BeanFactory)是最简单的容器(是Spring基本的IOC容器),提供了基础的依赖注入支持。
. 应用上下文(org.springframework.context.ApplicationContext)建立在Bean工厂基础之上,提供了系统构架服务。
4. IOC / DI:
1)Spring最核心的概念就是IOC(Inverse of Control 控制反转,所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转),控制反转概念并不是那么直观,所以Martin Fowler引入了了DI(Dependency Injection 依赖注入,所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中)概念来代替IOC。
2)使用Spring我们不必在程序中维护对象的依赖关系,只要在XML中设定,Spring容器会自已根据相关的配置去产生他们之间的关系,相当于所有的关系都是在容器运行的时候注入的,而本身他们是没有关系的。
5. AOP:
1)Spring最被人重视的另一个方面就是对AOP的支持,其实AOP只是Spring支持的一个子容器。
2)AOP在一个服务流程中插入与业务逻辑无关的系统服务逻辑,如:日志、权限验证、异常处理、事务等,而把这些独立出来设计成一个对象,这样的对象称为Aspect。
注:AOP后续会单独做详细讲解
6. 持久层:Spring提供了对持久层的整合,如对JDBC的使用加以封装简化,提供事务功能,对ORM工具如Hibernate等的整合。
7. Web框架整合:Spring也提供了Web的MVC解决方案,可以很好的善用IOC和AOP的功能,可以轻松的替换掉View层,如使用JPS,也可以使用熟悉的web容器,如struts技术与spring整合。
三、spring核心原理
1、IOC 控制反转
概念:控制权由对象本身转向容器,由容器根据配置文件创建对象实例并实现各个对象的依赖关系。
核心:bean工厂
2、AOP 面向切面编程
1)静态代理
a、根据每个具体类分别编写代理类
b、根据一个接口编写一个代理类
2)动态代理
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类。