Skip to content

Commit 4d696fc

Browse files
committed
SSM 笔记合入
1 parent 6bb309b commit 4d696fc

9 files changed

Lines changed: 6997 additions & 0 deletions

File tree

md/project/study/ssm/maven/maven.md

Lines changed: 879 additions & 0 deletions
Large diffs are not rendered by default.

md/project/study/ssm/mybatisplus/mybatisplus.md

Lines changed: 898 additions & 0 deletions
Large diffs are not rendered by default.

md/project/study/ssm/spring/spring-aop.md

Lines changed: 1017 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
# Spring框架学习
2+
3+
Spring框架主要的优势是在<font color='red'>**简化开发**</font>和 <font color='red'>**框架整合**</font>上,其主要内容包括以下几点:
4+
5+
* 简化开发:
6+
7+
* <font color='red'>**IOC**</font>
8+
* <font color='red'>**AOP**</font>
9+
* <font color='red'>**事务处理**</font>
10+
* 框架整合
11+
12+
- <font color='red'>**MyBatis**</font>
13+
- MyBatis-plus
14+
- Struts
15+
- Struts2
16+
- Hibernate
17+
- ……
18+
19+
* 学习路线
20+
* Spring的IOC/DI
21+
* Spring的AOP
22+
* AOP的具体应用,事务管理
23+
* IOC/DI的具体应用,整合Mybatis
24+
25+
26+
* 应用场景
27+
* web、微服务以及分布式系统等
28+
* Spring全家桶:
29+
* Spring Framework:Spring框架,是Spring中最早最核心的技术,也是所有其他技术的基础。
30+
* SpringBoot:Spring是来简化开发,而**<font color='red'>SpringBoot是来帮助Spring在简化的基础上能更快速进行开发</font>**
31+
* SpringCloud:这个是用来做分布式之微服务架构的相关开发。
32+
33+
* 官网:https://spring.io,
34+
35+
36+
## 系统架构图
37+
38+
Spring Framework的5版本目前没有最新的架构图,而最新的是4版本,所以接下来主要研究的是4的架构图
39+
40+
![Spring框架](./imgaes/Spring框架.png)
41+
42+
1.核心层
43+
44+
* Core Container:核心容器,这个模块是Spring最核心的模块,其他的都需要依赖该模块
45+
46+
2.AOP层
47+
48+
* AOP:面向切面编程,它依赖核心层容器,目的是==在不改变原有代码的前提下对其进行功能增强==
49+
* Aspects:AOP是思想,Aspects是对AOP思想的具体实现
50+
51+
3.数据层
52+
53+
* Data Access:数据访问,Spring全家桶中有对数据访问的具体实现技术
54+
* Data Integration:数据集成,Spring支持整合其他的数据层解决方案,比如Mybatis
55+
* Transactions:事务,Spring中事务管理是Spring AOP的一个具体实现,也是后期学习的重点内容
56+
57+
4.Web层
58+
59+
* 这一层的内容将在SpringMVC框架具体学习
60+
61+
5.Test层
62+
63+
* Spring主要整合了Junit来完成单元测试和集成测试
64+
65+
## 核心概念
66+
67+
* IOC(Inversion of Control)控制反转:使用对象时,**<font color='red'>由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部</font>**,此思想称为控制反转。
68+
* Spring技术对IOC思想进行了实现:Spring提供了一个容器,称为<font color='red'>**IOC容器**</font>,用来充当IOC思想中的"外部"。
69+
* IOC容器:负责对象的创建、初始化等一系列工作,其中包含了数据层和业务层的类对象。
70+
* Bean:被创建或被管理的对象在IOC容器中统称为<font color='red'>**Bean**</font>,IOC容器中放的就是一个个的Bean对象。默认情况下,Spring创建的Bean对象都是<font color='red'>**单例**</font>的(scope设置为singleton 或prototype)。
71+
* <font color='red'>**DI(Dependency Injection)依赖注入**</font>:在容器中建立bean与bean之间的依赖关系的整个过程。例如,业务层需要依赖数据层,service就要和dao建立依赖关系。
72+
73+
介绍完Spring的IOC和DI的概念后,会发现这两个概念的最终目标就是:<font color='red'>**充分解耦**</font>,具体实现:
74+
75+
* 使用IOC容器管理bean(IOC)
76+
77+
* 在IOC容器内将有依赖关系的bean进行关系绑定(DI)
78+
79+
80+
最终结果为:<font color='red'>**使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系**</font>。
81+
82+
83+
84+
## Bean
85+
86+
### Bean实例化
87+
88+
bean使用构造方法创建,Spring的IOC实例化对象的三种方式分别是:
89+
90+
* 构造方法(常用)
91+
* 静态工厂(了解)
92+
* 实例工厂(了解)
93+
* FactoryBean(实用)
94+
95+
### Bean生命周期
96+
97+
(1)Spring中对bean生命周期控制提供了两种方式:
98+
99+
* 在配置文件中的bean标签中添加`init-method``destroy-method`属性
100+
* 类实现`InitializingBean``DisposableBean`接口,这种方式了解下即可。
101+
102+
(2)对于bean的生命周期控制在bean的整个生命周期中所处的位置如下:
103+
104+
* 初始化容器
105+
* 1.创建对象(内存分配)
106+
* 2.执行构造方法
107+
* 3.执行属性注入(set操作)
108+
* 4.执行bean初始化方法
109+
* 使用bean
110+
* 1.执行业务操作
111+
* 关闭/销毁容器
112+
* 1.执行bean销毁方法
113+
114+
(3)关闭容器的两种方式:
115+
116+
* ConfigurableApplicationContext是ApplicationContext的子类
117+
* close()方法
118+
* registerShutdownHook()方法
119+
120+
## DI相关
121+
122+
Spring提供了两种注入方式,分别是:
123+
124+
* <font color='red'>**setter注入**</font>,提供可访问的<font color='red'>**set**</font>方法:setBookDao(BookDao bookDao)
125+
* 简单类型
126+
* 引用类型
127+
* <font color='red'>**构造器注入**</font>,BookServiceImpl(BookDao bookDao)
128+
* 简单类型
129+
* 引用类型
130+
131+
上述注入方式,不可避免地需要编写大量的配置文件,下面介绍一种更轻量方便的方法: <font color='red'>**自动装配**</font>
132+
133+
自动装配方式:
134+
135+
* 按类型(常用):autowire="byType"
136+
* 按名称
137+
* 按构造方法
138+
* 不启用自动装配
139+
140+
<font color='red'>**集合注入**</font>:
141+
142+
* 数组
143+
* List
144+
* Set
145+
* Map
146+
* Properties
147+
148+
编写方式,以数组为例:
149+
150+
```xml
151+
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
152+
<!--数组注入-->
153+
<property name="array">
154+
<array>
155+
<value>100</value>
156+
<value>200</value>
157+
<value>300</value>
158+
</array>
159+
</property>
160+
</bean>
161+
```
162+
163+
## 思考
164+
165+
* 为什么bean默认为单例?
166+
* bean为单例的意思是在Spring的IOC容器中只会有该类的一个对象,只有一个就避免了对象的频繁创建与销毁,达到了bean对象的复用,性能高。
167+
* bean在容器中是单例的,会不会产生线程安全问题?
168+
* 如果对象是有状态对象,即该对象有成员变量可以用来存储数据的,
169+
* 因为所有请求线程共用一个bean对象,所以会存在线程安全问题。
170+
* 如果对象是无状态对象,即该对象没有成员变量没有进行数据存储的,
171+
* 因方法中的局部变量在方法调用完成后会被销毁,所以不会存在线程安全问题。
172+
* 哪些bean对象适合交给容器进行管理?
173+
* 表现层对象
174+
* 业务层对象
175+
* 数据层对象
176+
* 工具对象
177+
* 哪些bean对象不适合交给容器进行管理?
178+
* 封装实例的域对象,因为会引发线程安全问题,所以不适合。

0 commit comments

Comments
 (0)