• Spring(一)


    视频链接:https://www.bilibili.com/video/BV1q94y1o7ts?vd_source=9545770e4a2968c05878ffac8589ec6c
    视频选集:P1— P38

    1.Spring概述

    在这里插入图片描述
    spring框架:它是一个容器,是整合其它框架的框架.核心是TOC和AOP.它由20多个模块构成.在很多领域都提供优秀的解决方案.

    1.1 Spring框架

    • Spring是于2003年兴起的一个轻量级的Java开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IOC)和面向切面编程(AOP)。 Spring是可以在Java SE/EE中使用的轻量级开源框架。
    • Spring的主要作用就是为代码"解耦”,降低代码间的耦合度。就是让对象和对象(模块和模块)之间关系不是使用代码关联,而是通过配置来说明。即在 Spring中说明对象(模块)的关系。
    • Spring根据代码的功能特点,使用IOC 降低业务对象之间耦合度。IOC使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由Spring 容器统一管理,自动“注入",注入即赋值。而AOP使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务"混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。
    • 官网: https://spring.io/【Spring 官网有Spring家族技术的介绍,有相应框架的jar包和文档,还有源码文件】

    1.2 Spring特点

    1. 轻量级:由20多个模块构成,每个jar包都很小,小于1M,核心包也就3M左右.对代码无污染
    2. 面向接口编程:使用接口,就是面向灵活,项目的可扩展性,可维护性都极高.接口不关心实现类的类型.使用时接口指向实现类,切换实现类即可切换整个功能.
    3. AOP:面向切面编程【将公共的,通用的,重复的代码单独开发,在需要的时候反织回去.底层的原理是动态代理.】
      在这里插入图片描述
    4. 整合其它框架【整合后使其它框架更易用】

    1.3 Spring体系结构

    Spring 由20多个模块组成,它们可以分为数据访问/集成(Data Access/Integration).Web、面向切面编程(AOP Aspects)提供JVM的代理(Instrumentation.消息发送(Messaging)核心容器(Core Container)和测试( Test)。
    在这里插入图片描述

    2. IOC 控制反转【基于xml】

    控制反转IOC(Inversion of Control)是一个概念,是一种思想。由spring容器进行对象的创建和依赖注入.程序员在使用时直接取出使用.
    正转:由程序员进行对象的创建和依赖注入称为正转.程序员说了算.

    在这里插入图片描述

    反转:由spring容器创建对象和依赖注入称为反转,将控制权从程序员手中夺走,交给spring容器,称为反转.容器说了算

    在这里插入图片描述


    • IOC是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式是依赖注入。应用广泛。
    • 依赖: classA类中含有 classB的实例,在 classA中调用classB的方法完成功能,即classA对classB有依赖。
    • 依赖注入:Dl(Dependency Injection),程序代码不做定位查询,这些工作由容器自行完成。依赖注入DI是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。
    • Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持对象之间依赖关系的管理。Spring框架使用依赖注入(DI)实现IOC
    • Spring 容器是一个超级大工厂,负责创建、管理所有的Java对象,这些Java对象被称为Bean。Spring容器管理着容器中 Bean之间的依赖关系,Spring使用“依赖注入”的方式来管理Bean之间的依赖关系。使用IOC实现对象之间的解耦和。

    2.1 spring创建对象

    在这里插入图片描述

    在这里插入图片描述

    2.2 给创建的对象赋值

    • 使用setter注入
      简单类型注入:使用value属性
      引用类型注入:使用ref属性
      注意:使用setter注入必须提供无参的构造方法,必须提供setXXX()方法

    简单类型注入:
    在这里插入图片描述
    在这里插入图片描述
    引用类型注入:
    先定义school类,然后在student中对school类进行引用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 使用构造方法注入
      Student stu = new student (“张三”,22) ;【使用构造方法创建对象的同时初始化对象】

    a.使用构造方法的参数名字进行注入值
    创建对象:
    在这里插入图片描述
    注入:【其中name 和 address都是构造方法的名称】
    在这里插入图片描述
    测试:
    在这里插入图片描述

    b.使用构造方法参数的下标注入值
    定义一个学生类,其中包含一个school
    在这里插入图片描述
    在这里插入图片描述
    测试:
    在这里插入图片描述

    c.使用默认的构造方法的参数的顺序注入值
    在这里插入图片描述
    测试:
    在这里插入图片描述

    2.3 项目案例

    使用三层架构进行用户的插入操作:界面层,业务逻辑层,数据访问层(模拟)

    spring接管下的三层项目构建:
    实体类
    com.bjpowernode.pojo    		Users
    数据访问层
    com. bjpowernode.dao  			UsersMapper.java(接口)
                          			UsersMapperImpl.java(实现类)
    业务逻辑层
    com. bjpowernode .service       UsersService.java(接口)
    								UsersserviceImpl.java (实现类)
    界面层
    com.bjpowernode.controller 		Userscontroller.java
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    实体类的创建
    在这里插入图片描述
    数据访问层
    定义接口:
    在这里插入图片描述
    同一个目录下写接口的实现类:
    在这里插入图片描述
    业务逻辑层
    定义接口:
    在这里插入图片描述
    同一个目录下写接口的实现类:
    在这里插入图片描述
    界面层
    在这里插入图片描述
    测试
    在这里插入图片描述

    2.4 Spring 接管三层对象的创建

    添加Spring依赖

    在这里插入图片描述
    创建数据访问层对象:

    在这里插入图片描述
    创建业务逻辑层的对象:

    在这里插入图片描述
    在这里插入图片描述
    创建界面层的对象:

    在这里插入图片描述
    在这里插入图片描述
    测试:

    在这里插入图片描述

    3.基于注解的IOC

    3.1 基本概念

    也称为DI (Dependency Injection),它是IOC的具体实现的技术.
    上面使用xml来创建对象并依赖注入,在这里使用注解annotation创建对象并依赖注入
    基于注解的IOC,必须要在spring的核心配置文件中添加包扫描

    • 创建对象的注解
      @Component:可以创建任意对象.
      @Controller:专门用来创建控制器的对象(Servlet),这种对象可以接收用户的请求,可以返回处理结果给客户端.
      @Service:专门用来创建业务逻辑层的对象,负责向下访问数据访问层,处理完毕后的结果返回给界面层.
      @Repository:专门用来创建数据访问层的对象,负责数据库中的增删改查所有操作.
    • 依赖注入的注解
      简单类型(8种基本类型+String)的注入:@Value【用来给简单类型注入值】
      引用类型的注入:
      A.@Autowired【使用类型注入值,从整个Bean工厂中搜索同源类型的对象进行注入】
      B.@Autowired ,@Qualifier【使用名称注入值,从整个Bean工厂中搜索相同名称的对象进行注入】

    3.2 @Component

    创建的对象的默认名称是类名的驼峰命名法.也可以指定对象的名称@Component(“指定名称”).

    先搭建项目,修改目录,修改pom.xml文件

    • 创建student类
      在这里插入图片描述
    • 添加包扫描
      在这里插入图片描述
    • 测试类
      在这里插入图片描述
    • 取出对象
      在这里插入图片描述

    3.3 简单类型注入

    在这里插入图片描述

    3.4 引用类型注入

    同源类型也可注入
    同源类型:
    a.被注入的类型(Student中的school)与注入的类型是完全相同的类型
    b.被注入的类型(Student中的school父)与注入的类型(子)是父子类
    c.被注入的类型(Student中的school接口)与注入的类型(实现类)是接口和实现类的类型

    3.4.1 按类型注入

    按类型注入,School中的 @Component一定要加上
    创建school对象:
    在这里插入图片描述
    创建student对象:

    在这里插入图片描述
    测试类:
    在这里插入图片描述

    3.4.2 按名称注入

    改变School对象:
    在这里插入图片描述

    改变Student对象:
    在这里插入图片描述
    测试案例不变

    3.4.3 有父子类的情况

    • 按类型注入值:【注意:在有父子类的情况下,使用按类型注入,就意味着有多个可注入的对象.此时按照名称进行二次筛选,选中与被注入对象相同名称的对象进行注入.】
      School对象:
      在这里插入图片描述

    定义SubSchool对象【继承School对象】:
    在这里插入图片描述
    Student对象:
    在这里插入图片描述
    测试:
    在这里插入图片描述
    测试结果:
    在这里插入图片描述

    • 按名称注入值:【注意:如果有父子类的情况下,直接按名称进行注入值.】
      在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    3.5 基于注解的三层项目的改造

    添加依赖:
    在这里插入图片描述
    添加包扫描:
    在这里插入图片描述
    添加注解:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    测试:
    在这里插入图片描述

    3.6 添加包扫描的N种方式

    1. 单个包扫描(推荐使用)
      在这里插入图片描述
    2. 多个包扫描,多个包之间以逗号或者空格或分号分隔
      在这里插入图片描述
    3. 扫描根包(不推荐)【会降低容器启动的速度,导致多做无用功】

    在这里插入图片描述

    3.7 Spring配置文件的拆分

    当项目越来越大,需要多人合作开发,一个配置就存在很大隐患,就需要拆分配置文件
    拆分配置文件的策略:

    • A.按层拆
      在这里插入图片描述

    • B.按功能拆
      在这里插入图片描述

    3.8 Spring配置文件的整合

    • 单个文件导入
      在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    测试:
    在这里插入图片描述

    • 批量导入
      在这里插入图片描述
    • 基于注解的三层项目的配置文件改造
      单独创建三个.xml
      在这里插入图片描述在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    3.9 基于xml的引用类型的自动注入

    在整个bean工厂中搜索,有没有这种类型的对象,有就自动注入
    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    第十四届蓝桥杯校内模拟赛(第二期)题解分享
    spark 窗口函数对多列数据进行排名示例
    开始打击了
    Linux
    数电笔记总结(三)(逻辑门电路)
    Vue路由守卫有哪些,怎么设置,有哪些使用场景?
    (二)JPA 连接工厂、主键生成策略、DDL自动更新
    12/4总结报告
    【无标题】在feign post中,如何发送 form-url-encoded 数据
    【C++】STL详解(十)—— 用红黑树封装map和set
  • 原文地址:https://blog.csdn.net/weixin_49883619/article/details/126864195