Spring 入门。
Spring 全家桶:spring,springMVC,Spring Boot,Spring Cloud,它们都是框架,负责Java开发的各个方面。先开始学习最基础的Spring。
一、Spring概述
优点:减轻对项目模块的管理,类和类之间的管理,帮助开发人员创建对象,管理对象之间的关系。
Spring核心技术:IOC,AOP。能实现模块之间、类之间的解耦合。
spring是一个开源组织,有很多项目,在官网中可以看到有如下project,每一个project就是一个开源框架。
我们学习的spring框架,就是其中的spring framework。
Spring 优点
- 轻量:核心功能依赖的jar包少,总共3M左右。且占用资源少。
- 解耦合:针对接口编程,提供了IOC控制反转,由容器管理对象之间的依赖关系。原来在程序代码中的对象创建方式,现在由容器完成。
- AOP:进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
- 方便集成各种优秀的框架:Spring对一些优秀的框架提供了直接的支持。
- 声明式事务的支持:只需要通过配置就可以完成对事务的管理,而无须手动编程。
- 方便程序的测试:Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。
二、Spring体系结构详解
Spring框架采用分层架构,根据不同的功能被划分成了多个模块,这些模块大体可分为 Data Access/Integration、Web、AOP、Aspects、Messaging、Instrumentation、Core Container 和 Test。
图中包含了 Spring 框架的所有模块,这些模块可以满足一切企业级应用开发的需求,在开发过程中可以根据需求有选择性地使用所需要的模块。下面分别对这些模块的作用进行简单介绍。
1. Data Access/Integration(数据访问/集成)
数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。
- JDBC 模块:提供了一个 JDBC 的抽象层,大幅度减少了在开发过程中对数据库操作的编码。
- ORM 模块:对流行的对象关系映射 API,包括 JPA、JDO、Hibernate 和 iBatis 提供了的集成层。
- OXM 模块:提供了一个支持对象/XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。
- JMS 模块:指 Java 消息服务,包含的功能为生产和消费的信息。
- Transactions 事务模块:支持编程和声明式事务管理实现特殊接口类,并为所有的 POJO。
2. Web 模块
Spring 的 Web 层包括 Web、Servlet、Struts 和 Portlet 组件,具体介绍如下。
- Web 模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IoC 容器初始化以及 Web 应用上下文。
- Servlet模块:包括 Spring 模型—视图—控制器(MVC)实现 Web 应用程序。
- Struts 模块:包含支持类内的 Spring 应用程序,集成了经典的 Struts Web 层。
- Portlet 模块:提供了在 Portlet 环境中使用 MV C实现,类似 Web-Servlet 模块的功能。
3. Core Container(核心容器)
Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 Expression Language 表达式语言模块组成,具体介绍如下。
- Beans 模块:提供了 BeanFactory,是工厂模式的经典实现,Spring 将管理对象称为 Bean。
- Core 核心模块:提供了 Spring 框架的基本组成部分,包括 IoC 和 DI 功能。
- Context 上下文模块:建立在核心和 Beans 模块的基础之上,它是访问定义和配置任何对象的媒介。ApplicationContext 接口是上下文模块的焦点。
- Expression Language 模块:是运行时查询和操作对象图的强大的表达式语言。
4. 其他模块
Spring的其他模块还有 AOP、Aspects、Instrumentation 以及 Test 模块,具体介绍如下。
- AOP 模块:提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。
- Aspects 模块:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。
- Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
- Test 模块:支持 Spring 组件,使用 JUnit 或 TestNG 框架的测试。
三、Spring IOC 控制反转
控制反转(IoC,Inversion of Control),指将把对象的创建、赋值、管理工作都交给代码之外的容器实现。
控制:创建对象,对象的属性赋值,对象之间的关系管理。
正转:使用new关键字构造方法创建对象,开发人员主动管理对象。
反转:把原来的开发人员管理创建对象的权限转移给代码之外的容器实现,由容器代替开发人员管理对象。
容器:是一个服务器软件,一个框架,Spring就是这样一个框架。
为什么IoC:减少对代码的改动,实现解耦合。
IoC体现
Tomcat作为容器,里面存放着Servlet,Listener,Filter等对象,不用手动创建对象。
IoC技术实现
使用DI(Dependency Injection)实现IoC的功能。
DI:依赖注入,只需要在程序中提供所使用对象的名称就可以由 DI 自动创建,赋值和查找。使用的是反射机制。
四、Spring 的第一个程序
步骤:
1、创建Maven项目,导入spring 的相关依赖
2、创建类(接口类和其实现类),和没有使用框架一样,普通的类。
3、创建spring需要使用的配置文件:声明类的信息,这些类由spring创建和管理。
4、测试对象创建
1、新建Maven工程
导入spring 的 maven依赖。
1 | <dependency> |
2、创建接口和实现类
1 | public interface SomeService { |
1 | public class SomeServiceImpl implements SomeService { |
3、创建配置文件
给Maven项目创建resources资源目录,在该目录下创建spring的xml配置文件,依赖导入成功后,会出现spring xml提示。
1 |
|
4、测试对象创建
1 | /* |
注:
1、什么样的对象放入spring 容器中?
(1)dao类,service类,controller类,工具类等(使用xml配置文件 或 注解方法 创建对象)
(2)spring中的对象默认都是单例的,在容器中叫这个名称的对象只有一个
2、不放入spring容器中的对象
(1)实体类对象,实体类对象来自于数据库
(2)servlet、listener、filter等由tomcat创建的对象