首先,我们在学习一个东西时,应该先了解,这个有什么用,那么 Spring 有什么用呢?
Spring 是目前非常流行的 Java Web 开发框架,用于解决企业应用的复杂性问题而存在的。
那么具体什么是 Spring 呢?它有哪些特性呢?
Spring 是一个以 IoC(Inversion of Control,控制反转) 和 AOP(Aspect Oriented Programming,切片技术) 为内核的框架,IoC 是 Spring 的基础。后面会详细介绍它们。
- 创建Spring的目的就是用来替代更加重量级的的企业级Java技术
- 简化Java的开发
- 基于POJO轻量级和最小侵入式开发
- 通过依赖注入和面向接口实现松耦合
- 基于切面和惯例进行声明式编程
- 通过切面和模板**减少样板式代码 **
什么是控制反转(IoC)
在 Java 的传统编程方式中,获取对象的方式通常是用 new 关键字主动创建一个对象。Spring 中的 IoC 方式对象的生命周期由 Spring 框架提供的 IoC 容器来管理,直接从 IoC 容器中获取一个对象,控制权从应用程序交给了 IoC 容器。
那么,我们来举个栗子。
如图,IoC 理论上是借助“第三方”实现具有依赖关系对象间的解耦。在没有使用 IoC 容器前,对象 A 依赖对象 B,那么后面当我们需要 B 时,其中无论是创建还是使用已经创建的 B,控制权都在自身。使用 IoC 之后,当我们需要对象 B 时,IoC 容器会主动创建一个对象 B 注入到对象 A 所需要的地方。
通过上述,我们发现,对象 A 获得依赖对象 B 的过程,由主动行为变成被动行为,即,把创建对象交给了 IoC 容器处理,控制权颠倒过来了,这就是所谓的控制反转。
什么是依赖注入(DI)
DI(Dependency Inject),依赖注入,是由 IoC 容器在运行期间动态的将某种依赖关系注入对象之中。
其实,DI 和 IoC 是对同一件事情的不同描述,依赖注入是从应用程序的角度描述,即应用程序依赖容器创建并注入其所需的外部资源;
控制反转是从容器的角度描述,即容器控制应用程序,由容器反向的向应用程序注入所需外部资源。
什么是AOP
AOP ,Aspect-Oriented Programming ,即面向切面编程,是面向对象编程(OOP)的一种补充。
传统的业务中,通常会进行实事务处理、日志记录等操作。虽然使用 OOP 可通过组合或者继承的方式来达到代码重用,但如果要实现某个功能(如,日志记录),相同的代码仍然会分散到各个方法中。这样如果要关闭某个功能,或者对其进行修改,就必须修改所有相关方法。无疑是提高了代码的出错率。
而 AOP 为此而生,**AOP 采取横向抽取机制,将分散在各个方法中的重复代码提取出来,然后在程序编译或运行时再将这些提取出来的代码应用到需要执行的地方。**虽然 AOP 是一种新的编程思想,但它只是 OOP 的延伸和拓展。
Spring(框架)
Spring框架主要由七部分组成,分别是
- Spring Core spring的核心功能: IOC容器, 解决对象创建及依赖关系
- Spring Web Spring对web模块的支持。
- 可以与struts整合,让struts的action创建交给spring
- spring mvc模式
- Spring DAO Spring 对jdbc操作的支持 【JdbcTemplate模板工具类】
- Spring ORM spring对orm的支持:
- 既可以与hibernate整合,【session】
- 也可以使用spring的对hibernate操作的封装
- Spring AOP 切面编程
- SpringEE spring 对javaEE其他模块的支持
(3)该框架的特征
①spring AOP(面向切面):可以通过预编译方式和运行其动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
②IOC(控制反转):控制反转是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。
③Spring web MVC:作用是整合,但不仅仅限于整合,Spring 框架可以被看做是一个企业解决方案级别的框架。客户端发送请求,服务器控制器(由DispatcherServlet实现的)完成请求的转发,控制器调用一个用于映射的类HandlerMapping**,该类用于将请求映射到对应的处理器来处理请求。HandlerMapping 将请求映射到对应的处理器Controller(相当于Action)在Spring 当中如果写一些处理器组件,一般实现Controller 接口,在Controller 中就可以调用一些Service 或DAO 来进行数据操作 ModelAndView 用于存放从DAO 中取出的数据,还可以存放响应视图的一些数据。 如果想将处理结果返回给用户,那么在Spring 框架中还提供一个视图组件ViewResolver,该组件根据Controller 返回的标示,找到对应的视图,将响应response 返回给用户。