Spring基础

目录

1. Spring 的特性

 1.1 轻量

1.2 面向容器

Spring 容器的任务

1.3 面向切面

1.4 控制反转

依赖注入

控制权的转移

1.5 框架灵活

2. Spring 的核心 JAR 包

3. Spring 的注解

4. Spring IoC 的原理

4.1 Spring IoC 简介

4.2 Spring Bean 的装配流程

4.3 Spring Bean 的作用域

a. Singleton

b. Prototype

c. Request

d. Session

e. Global Session


1. Spring 的特性

        Spring 基于 J2EE 技术实现了一套轻量级的  Java Web Service 系统框架,其提供的功能贯穿了项目开发的表现层、业务层和持久化层,有很多优秀的特性,包括轻量、面向容器、面向切面、控制反转(IoC)、框架灵活。

 1.1 轻量

        从 JAR 包的大小上来说,Spring 是一个轻量级的框架,其核心 JAR 包 spring-web-5.2.0.RELEASE.jar 和 spring-core-5.2.0.RELEASE.jar 的大小均在1.4MB左右;从系统的资源使用上来说,Spring 也是一个轻量级的框架,运行期间只需要少量的操作系统资源(内存和 CPU )便能稳定运行。

1.2 面向容器

        Spring 实现了对象的配置化和对象的生命周期管理,因此,可以理解它是面向容器的。

Spring 容器的任务

a. 通过 Spring 的 xml 文件或注解方式,应用程序可以配置每个 Bean 对象被创建和销毁的时间,以及 Bean 对象被创建的先后顺序和依赖关系

b. Spring 中的实例对象可以是全局唯一的单例模式(Spring的默认模式),也可以是在每次需要时都重新生成一个新的实例,具体以哪种方式创建 Bean 对象由 Bean 的生命周期来决定,通过 prototype

1.3 面向切面

        面向切面技术通过分离系统逻辑业务逻辑提高系统的内聚性。在具体的使用过程中,业务层只需要关注并实现和业务相关的代码逻辑,而不需要关注系统功能和业务功能的复杂关系。

1.4 控制反转

        IoC 有两个方面:依赖注入 和 控制权的转移

依赖注入

本来是在对象内部通过 new 来创建依赖对象,现在通过 Spring 容器来创建和管理依赖对象

控制权的转移

好处

a.降低耦合度 —— 由容器负责创建和管理依赖对象

b.提高可测试性 —— 容易替换依赖对象

c.支持 AOP 编程 —— AOP 的功能基于 IoC 实现

1.5 框架灵活

        应用程序可以根据需求引用相应的模块,用于实现不同的功能

2. Spring 的核心 JAR 包

        Spring 基于模块化实现,每个模块都对应不同的 JAR 包。要全面了解 Spring ,首先要从 JAR 包开始,但是 Spring 的 JAR 包很多,所以这里只提及 Spring 的核心 JAR 包,并做简要介绍。

序号包名称包说明
1Spring CoreSpring 的核心工具包
2Spring BeansSpring IoC 的实现,通过 XML 配置文件或注解的方式实现对 Spring Bean 的管理
3Spring Context

Spring 上下文环境,用于对 Bean 的管理和维护等

4Spring Test

Spring 对 JUnit 等测试框架的支持

5Spring Web基于 Spring 构建 Web 应用开发所需的核心类,包括自动载入 WebApplicationContext、Struts 与 JSF 集成、文件上传、Filter类和其他辅助工具类
6Spring Web MVC包含 Spring MVC 框架相关的所有类。当然,如果你的应用使用了独立的 MVC 框架,则不需要使用这个 JAR 包里的任何类
7Spring Context SupportSpring Context 的扩展支持,用于支持 MVC 方面的功能
8Spring JDBCSpring 针对 JDBC 的封装
9Spring ORMSpring 整合第三方 ORM 的实现,例如 MyBatis 、JDO 及 Spring 的 JPA
10Spring OXMSpring 对 Object/XML 映射的支持,可以让 Spring 在 Java 与 XML 之间方便的切换
11Spring AspectsSpring 对 AspectJ 框架的整合和支持
12Spring Expression LanguageSpring 的表达式语言
13Spring Framework Bom处理不同的项目 依赖 不同版本的 Spring 引起的版本冲突
14Spring InstumentSpring 针对服务器的代理接口
15Spring Instument TomcatSpring 对 Tomcat 的集成
16Spring JMSSpring 为简化 JMS API 的使用而做的封装
17Spring MessagingSpring 集成 Messaging API 和 消息协议
18Spring TXSpring 为 JDBC、JDO、JPA 等提供的一致的声明式事务管理和编程式事务管理
19Spring WebMVC Portlet基于 Portlet 环境的 Spring MVC 的增强

3. Spring 的注解

        Spring 的注解将应用程序中 Bean 的定义和 Bean 之间复杂的依赖关系的配置从 XML 配置中解放出来,应用程序只需要在某些服务或者功能时使用注解依赖注入即可,Bean 的具体定义和依赖关系由 Spring 的自动装配完成。这让 Spring 的使用更简单方便。

        常用注解如下表所示(是我自己比较熟悉的)

类别注解说明
Bean 声明@Component定义基础层的通用组件,没有明确的角色
@Service定义业务逻辑层的服务组件
@Repository在数据访问层定义数据资源服务
@Controller在展现层使用,用于定义控制器
Bean 注入@Autowired(Spring提供)服务依赖注入,一般用于注入 @Controller、@Service 定义的组件
@Resource(Java提供的)服务依赖注入,一般用于注入 @Repository 定义的组件
配置类注解@Configuration声明该类为配置类
@Bean注解在方法上,声明该类的返回值是一个 Bean 实例(这个对象将被注册为 Spring 上下文的一个 Bean)
Spring MVC 注解@Controller声明该类为Spring MVC 中的控制器
@RequestMapping用于声明和映射 Web 请求的地址和参数,包括访问路径和参数
@ResponseBody支持将返回值放在 Response Body 体中返回,通常用于返回 JSON 数据到前端
@RequestBody允许 request 的参数 放在 Request Body 中
@PathVariable用于接受基于路径的参数
@RestController组合注解,相当于 @ResponseBody 和 @Controller 的组合
@ExcepetionHandler

用于全局控制器的异常处理

AOP 注解@EnableAspectJAutoProxy开启 Spring 对 AspectJ 代理的支持
@Aspect声明一个切面
@PointCut声明一个切点
@Before

在方法执行之前执行

@After在方法执行之后执行
@Around在方法执行之前和之后都执行

4. Spring IoC 的原理

IoC ,既“控制反转”,是一种设计思想,将对象的创建和对象之间的依赖关系的维护交给容器来负责,以实现对象和对象之间解耦合的目的。

4.1 Spring IoC 简介

Spring 通过一个配置文件描述 Bean 和 Bean 之间的依赖关系,利用 Java 的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。

4.2 Spring Bean 的装配流程

Spring 会在启动时,从 XML 配置文件或注解中获取 应用程序提供的 Bean 配置信息,并在 Spring Bean 容器中生成一份对应的 Bean 配置注册表;然后根据这张注册表实例化 Bean ,装配好 Bean 之间的依赖关系,从而为上层业务提供基础的运行环境。其中 Bean 缓存池是采用 HashMap 实现。Spring Bean 的装配流程如下图所示。

4.3 Spring Bean 的作用域

        Spring 为 Bean 定义了 5 种作用域,分别为 Singleton (单例)、Prototype (原型)、Request (请求级别)、Session(会话级别)、Global Session(全局会话)

a. Singleton

        Singleton是单例模式,是 Spring 中的默认作用域。当实例类型为单例模式时,在 Spring IoC 容器中只会存在一个共享的 Bean 实例,无论有多少个 Bean 指向它,都会始终指向一个 Bean 对象。该模式在多线程下是不安全的。

b. Prototype

        Prototype 是原型模式,每次通过 Spring 容器回去 Prototype 定义的 Bean 时,容器都会创建一个新的 Bean 实例,每个 Bean 实例都有自己的属性和状态,而 Singleton 只有一个对象。

c. Request

        Request 指在一次 HTTP 请求中容器会返回该 Bean 的同一个实例,对不同的 HTTP 请求则会创建新的 Bean 实例,在当前 HTTP 请求结束后,该 Bean 实例也会相应的被销毁。

d. Session

        Session 是指在一次 HTTP Session 中,容器会返回该 Bean 的同一个实例,对不同的 Session 请求则会创建新的 Bean 实例。

e. Global Session

        Global Session 指在一个全局的 HTTP Session 中容器会返回该 Bean 的同一个实例,且仅在使用 Portlet Context 时有效。

  • 18
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尤为重要

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值