初识Spring
Spring
Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于J2EE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC
Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB(Enterprise Java Beans)完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益
- 2002年,首次推出Spring框架的雏形:interface21框架
- Spring框架,以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版
- Rod Johnson:Spring框架的创始人,同时也是SpringSource的联合创始人。
- spring原理:是现有的技术更加容易使用,本身是一个大杂烩
Spring是一个轻量级的控制反转(Inversion of Control 也叫做IoC)和面向切面编程(Aspect Oriented Programming 也叫AOP)的容器框架
IoC是 Spring 的基础,它支撑着Spring 对 Java Bean 的管理功能
AOP是 Spring 的重要特性,在不修改源代码的情况下,为程序统一添加功能
【官网地址】:https://spring.io/
【Github源码】:https://github.com/spring-projects/spring-framework
一、Spring框架的优点
1. 非侵入式设计
Spring 是一种非侵入式 (non-invasive)框架,所谓非侵入式是指允许应用程序中自由选择和组装Spring框架的各个功能模块,并且不要求应用程序的类必须继承或者实现Spring框架的某个类或接口
2. 降低耦合性,方便开发
Spring 就是一个 “大杂烩”,可以将所有对象的创建和依赖的关系和维护的工作都交给了 Spring 容器管理,从而大大减低了组件之间的耦合性
(软件工程中的概念,是判断软件设计好坏的标准:高内聚,低耦合)
3. 支持AOP编程
AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是 OOP(面向对象程序设计 Object Oriented Programming) 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
4. 支持声明式事务
在 Spring 中,可以直接通过Spring配置文件管理数据库事务,省去了手动编程的繁琐,提高了开发效率
5. 对框架整合的支持
Spring 提供了一个广阔的基础平台,其内部提供了对各种框架的支持,如Struts、Hibernate、Mybatis、Quartz等
常见的框架有
- SSH:Struct2 + Spring + Hibernate
- SSM:SpringMvc + Spring + Mybatis
二、Spring体系结构
Spring 是模块化的,允许使用者只选择适用于自己的模块
三、控制反转(IOC)与依赖注入
1. 控制反转(Inversion Of Control)
控制反转(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI甚至是 IoC 的另一种说法。没有 IoC 的程序中,我们使用面向对象编程,对象的创建于对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方
如下图所示
-
在传统的面向对象编程中,获取对象的方式时用关键字 "new"主动创建一个对象,也就是说,应用程序掌握着对象的控制权。在主动创建完对象之后,再将对象组合使用,这样会导致类与类之间高耦合,并难以测试
-
在使用 Spring 框架之后,对象的实例不再由调用者来创建,而是由 Spring 的 IoC 容器来创建,IoC 容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制
-
这样,控制权由应用代码转移到了 IoC 容器,控制权发生了反转,这就是 Spring 的控制反转
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)
2. 依赖注入(Dependency Injection)
依赖注入(DI)是指 IoC 容器在运行期间动态地将某种依赖资源注入到对象中。例如,将对象A注入(赋值)给对象B的成员变量。依赖注入的基本思想是,明确地定义组件接口,独立开发各个组件,然后根据组件的依赖关系组装运行
依赖注入(DI)和控制反转(IOC)是从不同角度来描述同一件事情
- 依赖注入是从应用程序的角度描述,即应用程序依赖 IoC 容器创建并注入它所需要大的外部资源
- 控制反转是从 IoC 容器的角度描述,即 IoC 容器控制应用程序,由 IoC容器反向地向应用程序注入应用程序所需要的外部资源