【JavaEE】SSM框架

news2024/11/15 16:48:33

文章目录

  • 一、Spring
    • 1、Spring相关概念
      • 1.1 Spring Framework系统架构
      • 1.2 核心概念(lOC、lOC容器、Bean、DI)
    • 2、入门案例
      • 2.1 IOC入门案例
      • 2.2 DI入门案例
    • 3、lOC相关内容
      • 3.1 bean配置
      • 3.2 bean实例化
      • 3.3 bean的生命周期
        • 3.3.1 控制bean生命周期执行的方法
        • 3.3.2 bean销毁时机
    • 4、DI相关内容
      • 4.1 Setter注入
      • 4.2 构造器注入
      • 4.3 依赖注入方式选择
      • 4.4 自动装配
      • 4.5 集合注入
    • 5、案例:数据源对象管理
      • 5.1 基本配置
      • 5.2 加载properties文件
    • 6、容器(补充)
      • 6.1 创建容器
      • 6.2 获取bean的方式
      • 6.3 容器类层次结构图
      • 6.4 BeanFactory
    • 7、注解开发
      • 7.1 注解开发定义bean
      • 7.2 纯注解开发
      • 7.3 bean管理
      • 7.4 依赖注入
        • 7.4.1 自动装配(@Autowired、@Qualifiler、@Value)
        • 7.4.2 读取properties文件(@PropertySource)
      • 7.5 第三方bean管理
        • 7.5.1 第三方bean管理(@Bean)
        • 7.5.2 第三方bean依赖注入(引用类型:方法形参,简单类型:成员变量)
      • 7.6 XML配置与注解配置比较
    • 8、Spring整合MyBatis
    • 9、Spring整合junit
    • 10、AOP
      • 10.1 AOP入门案例
      • 10.2 AOP工作流程
      • 10.3 切入点表达式
      • 10.4 AOP通知类型
      • 10.5 AOP案例
      • 10.6 AOP通知获取数据
  • 二、SpringMVC
  • 三、Maven高级
  • 四、SpringBoot
  • 五、MyBatisplus

一、Spring

1.Spring两大特征:

  • 简化开发,降低企业级开发的复杂性
  • 框架整合,高效整合其它技术,提高企业级应用开发与运行效率
     

2.Spring家族(Spring全家桶):
Spring发展到今天已经形成了一种开发的生态圈,Spring提供了若干个项目,每个项目用于完成特定的功能

Spring Frameword、Spring Boot、Spring Cloud

 

1、Spring相关概念

1.1 Spring Framework系统架构

1.Spring Framework
Spring Framework 是Spring生态圈中最基础的项目,是其他项目的根基
在这里插入图片描述
 
2.Spring系统架构图:在这里插入图片描述
 
3.Spring框架学习路径
在这里插入图片描述

 

1.2 核心概念(lOC、lOC容器、Bean、DI)

1.代码书写现状:

  • 耦合度偏高

在这里插入图片描述
 
2.解决方案:

  • 使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象
     

3.IoC(Inversion of Control)控制反转:

  • 对象的创建控制权由程序转移到 外部,这种思想称为控制反转
    (使用对象时,由主动 new 产生对象转换为由 外部 提供对象,此过程中对象创建控制权由程序转移到 外部,此思想称为控制反转)
     

3.Spring技术对Ioc思想进行了实现

  • Spring提供了一个容器,称为 IoC容器,用来充当IoC思想中的 “外部”
  • Ioc容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在 Ioc容器 中统称为 Bean

在这里插入图片描述
 

4.DI(Dependency Injection)依赖注入

  • 在容器中建立 bean 与 bean 之间的依赖关系的整个过程,称为依赖注入

在这里插入图片描述

目标:充分解耦

  • 使用IoC容器管理 bean(IoC)
  • 在Ioc容器内将有依赖关系的 bean 进行关系绑定(DI)

最终效果:

  • 使用对象时不仅可以直接从 IoC容器 中获取,并且获取到的 bean 已经绑定了所有的依赖关系

 

2、入门案例

2.1 IOC入门案例

1.管理什么?(Service与Dao)
2.如何将被管理的对象告知 Ioc容器?(配置)
3.被管理的对象交给IoC容器,如何获取到Ioc容器?(接口)
4.IoC容器得到后,如何从容器中获取bean?(接口方法)
5.使用Spring时导入哪些坐标?(pom.xml)

 
1.导入spring坐标(pom.xml)

<dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
  </dependencies>

2.创建 spring配置文件(applicationContext.xml),配置对应类作为 spring 管理的 bean
在这里插入图片描述
3.初始化容器(spring核心容器/spring容器),通过容器获取 bean
在这里插入图片描述

 

2.2 DI入门案例

1.基于IoC管理bean
2.Service中使用new形式创建的Dao对象是否保留?(否,不保留)
3.Service中需要的Dao对象如何进入到Servicer中?(提供方法
4.Service与Dao间的关系如何描述?(配置)

1.删除使用 new 的形式创建对象的代码,并提供依赖对象对应的 setter 方法:
在这里插入图片描述
2.配置 service 与 dao 之间的关系:
在这里插入图片描述

 

3、lOC相关内容

3.1 bean配置

在这里插入图片描述

0、基础配置:
在这里插入图片描述
 
1、bean 别名配置:
在这里插入图片描述
 
2、bean 作用域配置:
在这里插入图片描述

适合交给容器进行管理的bean:

  • 表现层对象
  • 业务层对象
  • 数据层对象
  • 工具对象
     

不适合交给容器进行管理的bean

  • 封装实体的域对象

 

3.2 bean实例化

实例化 bean 的三种方式:
bean本质上就是对象,创建bean使用构造方法完成

 
方式一、构造方法(常用)

在这里插入图片描述
无参构造方法如果不存在,将抛出异常 BeanCreationException

 
方式二、静态工厂(了解)

在这里插入图片描述

 
方式三、实例工厂(了解)

在这里插入图片描述

 
方式四、FactoryBean(实用)

在这里插入图片描述

 

3.3 bean的生命周期

生命周期:从创建到消亡的完整过程
bean生命周期:bean从创建到销毁的整体过程
bean生命周期控制:在bean创建后到销毁前做一些事情
 
bean初始化所经历的阶段:

● 初始化容器
   1.创建对象(内存分配)
   2.执行构造方法
   3.执行属性注入(set操作)
   4.执行bean初始化方法
 
● 使用bean
   1.执行业务操作
 
● 关闭/销毁容器
   1.执行bean销毁方法

 

3.3.1 控制bean生命周期执行的方法

方法一

在这里插入图片描述

方法二、接口控制(了解)

在这里插入图片描述

 

3.3.2 bean销毁时机

在这里插入图片描述

 

4、DI相关内容

依赖注入方式:
(依赖: 一个对象的运行需要另一个对象)
 
&.思考:向一个类中传递数据的方式有几种?

  • 普通方法(set方法)
  • 构造方法
     

&.思考:依赖注入描述了在容器中建立bean与bean之间依赖关系的过程,如果bean运行需要的是数字或字符串呢?

  • 引用类型
  • 简单类型(基本数据类型与String)
     

&.依赖注入方式

  • setter注入
        简单类型
        引用类型
  • 构造器注入
        简单类型
        引用类型

在这里插入图片描述

 

4.1 Setter注入

提供可访问的 set 方法

 
&、Setter注入–引用类型:

在这里插入图片描述

 
&、Setter注入–简单类型:

在这里插入图片描述

 
&、也可以为一个类配置多个依赖:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="bookDao" class="com.eve.dao.impl.BookDaoImpl" >
        <property name="databaseNum" value="mysql" />
        <property name="connectionNum" value="10" /><!-- spring内部会自动转成对应的类型 -->
    </bean>  
    <bean id="bookDao2"  class="com.eve.dao.impl.BookDaoImpl2" />

    <bean id="bookService" class="com.eve.service.impl.BookServiceImpl" >
        <property name="bookDao" ref="bookDao" />
        <property name="bookDao2" ref="bookDao2" />
    </bean>   
</beans>

 

4.2 构造器注入

&、构造器注入–引用类型

在这里插入图片描述

 
&、构造器注入–简单类型

在这里插入图片描述

 
&、构造器注入–参数匹配(了解)

在这里插入图片描述

 

4.3 依赖注入方式选择

1. 强制依赖(必要的) 使用构造器进行,使用setter注入有概率不进行注入导致ulI对象出现
2. 可选依赖使用 setter 注入进行,灵活性强
3. Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨
4. 如果有必要可以两者同时使用,使用构造器注入完成强依赖的注入,使用setteri注入完成可选依赖的注入
5. 实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter?方法就必须使用构造器注入
6. 自己开发的模块推荐使用setter注入

 

4.4 自动装配

Ioc容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
 
自动装配方式:

  • 按类型(常用)
    在这里插入图片描述

  • 按名称

  • 按构造方法

  • 不启用自动装配
     

依赖自动装配特征:

  • 自动装配用于引用类型依赖注入,不能对简单类型进行操作
  • 使用按类型装配时 (byType) 必须保障容器中相同类型的bean唯一,推荐使用
  • 使用按名称装配时 (byName) 必须保障容器中具有指定名称的bean,因变量名与配置耦合,推荐使用
  • 自动装配优先级低于 setteri 注入与构造器注入,同时出现时自动装配配置失效

 

4.5 集合注入

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

 

5、案例:数据源对象管理

5.1 基本配置

数据库连接池:

在这里插入图片描述

mysql数据库连接驱动坐标:

<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.26</version>
</dependency>

 

5.2 加载properties文件

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/util
            https://www.springframework.org/schema/util/spring-util.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd
        ">

    <context:property-placeholder location="classpath*:*.properties" system-properties-mode="NEVER" /><!-- 还可以从另的工程框架中读取 -->

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <bean id="bookDao" class="com.eve.dao.impl.BookDaoImpl">
        <property name="name" value="${username}" />
    </bean>

</beans>

 

6、容器(补充)

6.1 创建容器

在这里插入图片描述

 

6.2 获取bean的方式

在这里插入图片描述

 

6.3 容器类层次结构图

在这里插入图片描述

 

6.4 BeanFactory

在这里插入图片描述

 

7、注解开发

7.1 注解开发定义bean

定义:在这里插入图片描述

分类(只是为了方便我们区分):
在这里插入图片描述

 

7.2 纯注解开发

Spring.3.o升级了纯注解开发模式,使用]ava类替代配置文件,开启了Spring快速开发赛道
 
Java类代替了Spring核心配置文件:
在这里插入图片描述
 
@Configurationi注解用于设定当前类为配置类

配置ComponentScan注解使用,一个类如: JdbcConfig要定义为配置类时,需要加上@Configuration,此时 ComponentScan 就会扫描到,若不进行这样做,也可以使用 @Import 导入)

@ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式

@ComponentScan({“com.itheima.service”,“com.itheima.dao”})

 

读取Spring核心配置文件初始化容器对象切换为读取 Java配置类初始化容器对象在这里插入图片描述

 

7.3 bean管理

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

 

7.4 依赖注入

7.4.1 自动装配(@Autowired、@Qualifiler、@Value)

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

 

7.4.2 读取properties文件(@PropertySource)

在这里插入图片描述

 

7.5 第三方bean管理

7.5.1 第三方bean管理(@Bean)

该方法添加 @bean 注解后,此方法返回的 bean 将交给 spring 管理
在这里插入图片描述
 
&、不建议写在 SpringConfig中
 在这里插入图片描述
建议
在这里插入图片描述
不建议
在这里插入图片描述

 

7.5.2 第三方bean依赖注入(引用类型:方法形参,简单类型:成员变量)

依赖注入:简单类型与引用类型
在这里插入图片描述
 
在这里插入图片描述

 

7.6 XML配置与注解配置比较

在这里插入图片描述

 

8、Spring整合MyBatis

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

在这里插入图片描述

 

9、Spring整合junit

在这里插入图片描述

 

10、AOP

AOP(Aspect Oriented Programming): 面向切面编程,一种编程范式,指导开发者如何组织程序结构

  • OOP(Object Oriented Programming): 面向对象编程
     

作用:在 不惊动原始设计 的基础上为其进行 功能增强
 
Spring理念:无入侵式/无侵入式

在这里插入图片描述

切入点就是要增强的方法,通知就是增强的内容。切面描述的是在哪个切入点上执行哪些通知
在这里插入图片描述

 

10.1 AOP入门案例

在这里插入图片描述

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

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

 

10.2 AOP工作流程

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

目标对象(Target): 原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的
代理(Poy): 目标对象无法直接完成工作,需要对其进行功能回填,通过原始对象的代理对象实现

 

10.3 切入点表达式

切入点:要进行增强的方法
切入点表达式:要进行增强的方法的描述方式

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

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

 

10.4 AOP通知类型

在这里插入图片描述

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

 

10.5 AOP案例

在这里插入图片描述

 

10.6 AOP通知获取数据

获取参数

获取返回值

获取异常

 

二、SpringMVC

 

三、Maven高级

四、SpringBoot

五、MyBatisplus

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI智能分析在智慧电厂的典型应用

电力供应是整个社会生产、人民生活的基本保证之一。智慧电力作为城市智能化发展的客观需求&#xff0c;是智慧城市的重要基础&#xff0c;也是智慧城市建设的一项重要内容。 智慧能源用最前沿技术淋漓尽致地表达着对未来能源发展趋势的理解与实践。智慧电力将多项创新成果应用于…

【前端】Vue项目:旅游App-(6)city:隐藏TabBar的2种方法

文章目录目标过程与代码方法1&#xff1a;通过路由隐藏方法2&#xff1a;用样式隐藏对方法2封装总代码修改的文件common.cssindex.jscity.vue目标 city页是点击上篇“广州”位置所跳转的页面。此页面要隐藏TabBar。 过程与代码 city页要隐藏TabBar。我们这里有两种隐藏的方法…

【Effective Objective - C】—— 读书笔记(五)

【Effective Objective - C】—— 读书笔记&#xff08;五&#xff09; 内存管理 文章目录【Effective Objective - C】—— 读书笔记&#xff08;五&#xff09;内存管理29.理解引用计数引用计数工作原理属性存取方法中的内存管理自动释放池保留环要点30.以ARC简化引用计数使…

Qt扫盲-QSystemTrayIcon理论总结

QSystemTrayIcon理论总结一、概述二、使用对象三、使用四、常用函数介绍1. 静态函数2. 公共槽函数3. 信号一、概述 现代操作系统通常在桌面上提供一个特殊的区域&#xff0c;称为系统托盘或通知区域&#xff0c;长期运行的应用程序可以在这里显示图标和短消息。什么意思呢&…

【Spring】1. Java对象序列化和反序列化

1. 概念 1.1 序列化 将数据结构或对象转换成二进制字节流的过程 1.2 反序列化 序列化的反过程把二进制字节流恢复为数据结构或对象的过程1.3 序列化的目的&#xff1a; 通过网络传输对象或者说是将对象存储到文件系统、数据库、内存中。 2. 为什么要进行序列化&#xff1f;&…

【Linux】Linux开发工具(一)——vim工具

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Linux》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 1.什么是vim 1.1什么是vim 1.2vim和vi的区别&#xff1a; 2.vim基础 2.…

字符串的模式匹配

字符串的模式匹配引言应用方法一 暴力匹配算法 (C语言实现)程序实现暴力算法思想暴力算法的时间复杂度方法二 KMP 算法程序实现KMP 算法思想KMP 算法的时间复杂度暴力匹配算法 vs KMP 算法next 数组的训练KMP 算法的优化next 数组 转换成 nextval 数组的思想引言 在我们日常生…

第12章 角色页的修改、添加

1 定义src\components\Users\EditRole.vue <template> <el-dialog width"30%"> <!-- <span>{{propParent}}</span> --> <template #header> <div class"my-header"> <h1 style"margin: 0px; padding: …

快速指南 :ESP-IDF 自定义以太网 PHY 驱动程序

“我想用我最喜欢的芯片开始新的产品设计&#xff0c;但它断货了&#xff01;哦&#xff0c;不&#xff01;我必须设计一个新的 PCB&#xff0c;并重新开发驱动程序&#xff01;”如今&#xff0c;每个设计师都非常清楚这种感觉…好消息是&#xff0c;至少在 ESP-IDF 以太网 PH…

[C语言]浮点型在内存中的存储

在上一篇文章&#xff0c;我们讲述了整型在内存中的存储&#xff0c;这篇文章我们就一起来看一下“浮点型在内存中的存储” 回顾&#xff1a;整型在内存中的存储[C语言]和我一起来认识“整型在内存中的存储”_HY_PIGIE的博客-CSDN博客 目录 1.浮点数家族 2.整型和浮点型的存储…

教你从零开始搭建自己的魔兽世界服务器

首先需要一份 WOW 的程序底包:1底包使用方法: 解压后,放到 d: 目录即可, 如下图 &#xff08;最好是D盘下 因为有很多东西都是D:/连接的 &#xff09;2运行http-mysql/下的文件INIT.CM_重命名为INIT.CMD 运行3设置登录器下载 &#xff0c;在http-mysql/htdocs下创建DOWNLOAD文件…

再次改进MBR(从磁盘读入Loader加载器)

文章目录前言前置知识代码说明实验操作前言 本博客记录《操作系统真象还原》第二章第2个实验操作~ 实验环境&#xff1a;ubuntu18.04VMware &#xff0c; Bochs下载安装 实验内容&#xff1a;从磁盘读入Loader加载器 实验思路&#xff1a; MBR 受到512字节大小的限制&#…

kernel pwn gdb调试

前言 对于Linux的二进制程序&#xff0c;gdb调试是十分重要的&#xff0c;可以清楚的了解程序是如何运行的&#xff0c;这里单独拉一篇记录我在kernel pwn中遇到的一些调试 GDB选择 在三大件pwndbg,gef,peda中&#xff0c;用了一圈下来感觉gef和pwndbg都挺好 gdb安装 简单…

PaddleNLP教程文档

文章目录一、快速开始1.1 安装PaddleNLP并 加载数据集1.2 数据预处理1.3 加载预训练模型1.4 设置评价指标和训练策略1.5 模型训练与评估1.6 模型预测二、数据处理2.1 整体介绍2.2 加载内置数据集2.3 自定义数据集2.3.1 从本地文件创建数据集2.3.2 paddle.io.Dataset/IterableDa…

OpenShift Security - 用 RHACS 为应用自动生成 NetworkPolicy

《OpenShift / RHEL / DevSecOps / Ansible 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.12 RHACS 3.73.1 环境中验证 文章目录什么是 NP-Guard用 NP-Guard 自动生成 NetworkPolicy参考什么是 NP-Guard NP-Guard 是 IBM 发起的一个开源项目&#xff0c;用来自动创建 …

WindowsTerminal 安装 oh-my-posh

文章目录1 前言2 安装过程3 Posh Themes 自定义主题参考1 前言 在Linux中&#xff0c;有非常好用的oh-my-zsh&#xff0c;最近使用WindowsTerminal时想想有没有和oh-my-zsh相同好用的插件呢&#xff0c;答案是&#xff1a;oh-my-posh 2 安装过程 进入最新版PowerShell&#…

干货 | 解决 App 自动化测试的常见痛点(弹框及首页启动加载完成判断处理)

1. 常见痛点App 自动化测试中有些常见痛点问题&#xff0c;如果框架不能很好的处理&#xff0c;就可能出现元素定位超时找不到的情况&#xff0c;自动化也就被打断终止了。很容易打消做自动化的热情&#xff0c;导致从入门到放弃。比如下面的两个问题&#xff1a;一是 App 启动…

【代码题】链表面试题

目录 1.链表分割 2.相交链表 3.环形链表 4.环形链表 II 1.链表分割 点击进入该题 现有一链表的头指针 ListNode* pHead&#xff0c;给一定值x&#xff0c;编写一段代码将所有小于x的结点排在其余结点之前&#xff0c;且不能改变原来的数据顺序&#xff0c;返回重新排列后的…

国内注册Steam账号的快捷方法

本文介绍在国内注册Steam账号的快速、简便方法。 目前&#xff0c;在国内注册新的Steam账号变得越来越麻烦&#xff1b;尤其在最近&#xff0c;无论是无休止的谷歌人机身份验证&#xff0c;还是无法收到的验证邮件&#xff0c;都使得新建一个Steam账号与原来相比变得更加困难。…

[Linux_]make/Makefile

[Linux_]make/Makefile 心有所向&#xff0c;日复一日&#xff0c;必有精进专栏&#xff1a;《Linux_》作者&#xff1a;沂沐沐目录 [Linux]make/Makefile 前言 一、Mikefile 二、如何写Mikefile文件 三、原理 四、项目清理 报错&#xff1a;missing separator 前言 一个工…