SSM(B站黑马)学习笔记
01-1-Spring概述
01-2-Spring IOC
01-3-Spring AOP
01-4-Spring 事务
02-SpringMVC
03-SSM整合
04-Maven高级
05-SpringBoot
06-MyBatisPlus
前言
SSM(B站黑马)学习笔记 01-2-Spring IOC
IOC、核心容器
核心观点
IOC/DI、IOC容器(管理对象的创建和初始化过程)、Bean
![](https://i-blog.csdnimg.cn/blog_migrate/33f35b8d821e0627272200d2bdb7e28f.png)
更改数据层实现,需要重新编译、测试、部署、发布,都是有成本的。
![](https://i-blog.csdnimg.cn/blog_migrate/5d303c278acda6d64d9b92ebdaa72e05.png)
![](https://i-blog.csdnimg.cn/blog_migrate/85ae7d11ddbed47fabcb12d00127cc22.png)
![](https://i-blog.csdnimg.cn/blog_migrate/30c5133f786bc1baa8f49c33a30f310b.png)
IOC快速入门
快速入门思路分
-
导入Spring坐标(依赖)
-
定义spring管理的类(接口)
-
创建Spring配置文件,配置对应类作为Spring管理的bean
-
初始化IOC容器(Spring核心容器/Spring容器),提供容器获取bean
DI(dependency injection 依赖注入)
DI 快速入门
就是旧写法对项目的耦合度偏高,使用IOC将new对象的交由外部管理,bean就是声明要管理的类,在bean中建立类和类的依赖关系,也通过bean传递运行该类所需的东西,比如service需要dao层,在service就不用new dao层,在bean中声明dao层的bean和service的bean,在service的bean中建立两者得到依赖关系称为DI
快速入门思路分析
-
删除业务层中使用new的方式创建的dao对象 2.提供对应的set方法
-
配置server与dao的关系
DI(依赖注入)方式
依赖注入就是描述bean和bean之间的关系,比如service和dao的关系,在service的bean中引用dao的bean称为引用类型,又比如管理数据库连接池的bean所需驱动 url 用户名 密码 这些就是简单类型。传递供这个bean运行所需的东西,而这个bean又是声明要管理的类,所以就是传给这个类需要的东西让程序正常运行。
依赖注入的两种方式
setter注入——引用类型
setter注入——简单类型
构造器注入——引用类型(了解)
![](https://i-blog.csdnimg.cn/blog_migrate/911460adab7e90fa234761559eeb1a81.png)
构造器注入——简单类型
![](https://i-blog.csdnimg.cn/blog_migrate/1ca9084f420407c4b8459c77ce646893.png)
参数适配(了解)
两种方式选择
依赖自动装配
依赖自动装配特征
集合注入(很少用)
Bean
Bean配置
bean基础配置
bean别名配置
bean作用范围配置
实例化bean的三(四)种方式
![](https://i-blog.csdnimg.cn/blog_migrate/3de148954bf685ee7030665e4d94cf59.png)
使用构造方法(常用)
就是什么都不写
使用静态工厂实例化(了解)
早些年做程序常用方式,就是造对象不要自己new,用工厂的方式,做一定程度的解耦。这种方式一般是为了兼容早期的遗留系统使用,所以了解即可。
补充:工厂设计模式,顾名思义,就是用来生产对象的,在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则,如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的:所以说,工厂模式最大的优点就是:解耦
用实例工厂实例化bean(了解)
方式三改良 使用FactoryBean实例化bean(实用)
Bean生命周期
![](https://i-blog.csdnimg.cn/blog_migrate/9459bbff2fb550dd2e650f2a786e27ff.png)
配置的方法控制生命周期
destory没执行,因为现在程序运行在Java虚拟机中,虚拟机启动了,IOC容器加载的配置也启动了,然后bean初始化并执行完了,然后程序执行完虚拟机就退出了,没有给bean销毁的机会
使用接口控制生命周期(了解)
bean销毁
数据源对象管理(第三方的bean管理)
例1:阿里巴巴数据库连接池
导入坐标(依赖)
连接数据库一般需要数据库驱动 url 用户名 密码,查看需要管理的对象是用构造方法还是set方法。按住ctrl点击文件,按ctrl+f12查看方法。(管理第三方提供的资源,就是你的对象交给我管理我把对应的属性提供给它正常工作)
连接成功
例2:C3P0数据库连接池
导入坐标(依赖)
管理C3P0的对象,要管理谁 不知道,通过查询百度等找的类似于阿里巴巴数据库连接池的DruidDataSource。
连接成功
加载properties文件
将 com.mysql.cj.jdbc.Driver 这些写在配置文件中不合适,应该单独抽出来,用properties文件。使用Spring加载properties文件中的信息
容器
核心容器总结
容器相关
bean相关
依赖注入相关
注解开发
Spring提供了一系列注解,使用注解就能加快开发速度。从Spring2.0开始Spring逐步提供了各种各样的注解,到了2.5的时候注解就比较完善了,所以我们先学习如何使用Spring提供的这一系列注解来简化我们的开发。到了Spring3.0的时候推出了纯注解开发。
注解开发定义Bean
![](https://i-blog.csdnimg.cn/blog_migrate/4ba67c120d64836079c9e550f92c7cf3.png)
根据名称访问@Component(“bookDao”)相当于
根据类访问@Component 不指定名称
<context:component-scan base-package=“com.gdit”/>会扫描该包下的类,相当于bean标签内的class
@Component的衍生注解@Controller @Service @Repository 这三个作用跟@Component功能一样,只是为了方便理解分层
![](https://i-blog.csdnimg.cn/blog_migrate/211fed3465c35a548e40a808632046e3.png)
纯注解开发
Spring3.0的时候推出了纯注解开发,免去了配置文件,用类替换掉配置文件
@Configuration就代表这是配置类相当于配置文件的头标
@ComponentScan(“com.gdit”)相当于扫描包<context:component-scan base-package=“com.gdit”/>
容器通过类获取
注解开发依赖注入
配置文件有set注入 构造器注入,Spring注解开发是为了加速开发,所以对原始功能做了阉割,只做了最快最好用的功能 自动装配。
引用类型
@Autowired
注意:由于@Autowired是按类型装配的,当有两个BookDao的实现类时就会出错如图
可以通过@Qualifier(“”)注解指定名称装配 必须打破@Autowired注解使用
简单类型
简单类型加载properties文件
注解开发 bean作用范围与生命周期
第三方bean管理
第三方bean管理
管理第三方bean 由于不能把配置直接写源代码中,所以只能以编程去写
导入坐标(依赖)
新建单独配置类
方式一:扫描包的形式(不推荐,当配置了过多无法观察加载了哪些配置类)
方式二:使用@Import()注解导入配置类(多个使用数组 这样便于精准查看导入了哪些配置类)
只用一个@Import()注解
两种方式都可运行(推荐第二种)两种方式都可运行(推荐第二种)
第三方bean依赖注入
简单类型
引用类型
定义bean
注解开发总结
XML配置与注解配置对比
Spring整合
Spring整合Mybatis
思路分析
Mybatis独立开发 导入依赖->编写mybatis-config.xml配置文件->代理开发(xml映射文件或注解开发,这里使用纯注解开发)->编码执行
Spring IOC用来管bean的,思考Mybatis中哪些bean应该交给它管。在Mybatis独立开发的编码执行阶段,将其分成几部分,其中获取数据层接口部分随着业务的变化也会随之变化所以不是;第二部分获取SqlSession的openSession依赖于SqlSessionFactory造的对象,所以核心对象是SqlSessionFactory。构建SqlSessionFactory对象需要加载mybatis-config.xml,数据库的配置所有都是围绕这个配置文件的,图二中初始化dataSource部分告知SqlSessionFactory操作哪个数据库,所以这一部分是为SqlSessionFactory服务的。
分析核心对象->交由Spring管理
Spring整合Mybatis
相关依赖
<dependencies>
<!--Spring基础框架-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>
<!--数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<!--Spring操作数据库-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<!--Spring整合Mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
整合Mybatis核心容器注解开发初始化
编写整合Mybatis的配置类
将sqlSessionFactory交由Spring管理,对其所需的mybatis-config.xml配置进行替换(注:dataSource是jdbConfig来的,它生成的DataSource已经交给Spring了)
SqlSessionFactoryBean是Mybatis和Spring整合快速创建SqlSessionFactory对象。FactoryBean都是造对象的,其都有一个getObject()方法返回对象
整合完成运行
Spring整合JUnit
导入相关依赖
编写测试类
设定类运行器->告知上下文配置->自动注入 编写测试方法
注:
该内容是根据B站黑马程序员学习时所记,相关资料可在B站查询:黑马程序员2022最新SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术