【SSM学习】01-2-Spring IOC

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

更改数据层实现,需要重新编译、测试、部署、发布,都是有成本的。

IOC快速入门

快速入门思路分




  1. 导入Spring坐标(依赖)

  2. 定义spring管理的类(接口)

  3. 创建Spring配置文件,配置对应类作为Spring管理的bean

  4. 初始化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

快速入门思路分析



  1. 删除业务层中使用new的方式创建的dao对象 2.提供对应的set方法

  2. 配置server与dao的关系

DI(依赖注入)方式

依赖注入就是描述bean和bean之间的关系,比如service和dao的关系,在service的bean中引用dao的bean称为引用类型,又比如管理数据库连接池的bean所需驱动 url 用户名 密码 这些就是简单类型。传递供这个bean运行所需的东西,而这个bean又是声明要管理的类,所以就是传给这个类需要的东西让程序正常运行。

依赖注入的两种方式

setter注入——引用类型



setter注入——简单类型


构造器注入——引用类型(了解)
构造器注入——简单类型

参数适配(了解)

两种方式选择

依赖自动装配


依赖自动装配特征

集合注入(很少用)






Bean

Bean配置

bean基础配置

bean别名配置

bean作用范围配置



实例化bean的三(四)种方式

使用构造方法(常用)
就是什么都不写


使用静态工厂实例化(了解)
早些年做程序常用方式,就是造对象不要自己new,用工厂的方式,做一定程度的解耦。这种方式一般是为了兼容早期的遗留系统使用,所以了解即可。
补充:工厂设计模式,顾名思义,就是用来生产对象的,在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则,如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的:所以说,工厂模式最大的优点就是:解耦



用实例工厂实例化bean(了解)



方式三改良 使用FactoryBean实例化bean(实用)



Bean生命周期

配置的方法控制生命周期

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

根据名称访问@Component(“bookDao”)相当于

根据类访问@Component 不指定名称

<context:component-scan base-package=“com.gdit”/>会扫描该包下的类,相当于bean标签内的class

@Component的衍生注解@Controller @Service @Repository 这三个作用跟@Component功能一样,只是为了方便理解分层

纯注解开发

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企业实用开发技术

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值