ssm入门

文章目录

  • 1.介绍ssm
  • 2.Spring篇
    • 基础内容
      • 🪅什么是IOC(控制反转)
      • Spring和IOC之间的关系
      • IOC容器的作用以及内部存放
      • IoC入门案例
      • 📬DI(Dependency Injection)依赖注入
      • 依赖注入的概念
      • IOC容器中哪些bean之间要建立依赖关系
      • DI入门案例
    • IOC相关内容
      • 🔮bean基础配置


1.介绍ssm

首先介绍一下SSM框架,以避免认识不清晰的情况发生

ssm中讲的是spring framework

介绍一下架构

在这里插入图片描述
(1)核心层
Core Container:核心容器,这个模块是Spring最核心的模块,其他的都需要依赖该模块

(2)AOP层
AOP:面向切面编程,它依赖核心层容器,目的是在不改变原有代码的前提下对其进行功能增强

Aspects:AOP是思想,Aspects是对AOP思想的具体实现

(3)数据层
Data Access:数据访问,Spring全家桶中有对数据访问的具体实现技术

Data Integration:数据集成,Spring支持整合其他的数据层解决方案,比如Mybatis

Transactions:事务,Spring中事务管理是Spring AOP的一个具体实现

(4)Web层

(5)Test层
Spring主要整合了Junit来完成单元测试和集成测试

对Spring的学习主要包含四部分内容:

在这里插入图片描述

在这里插入图片描述

为解决耦合度较高的问题,Spring提出了一个解决方案:

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

这也就是Spring的核心思想


2.Spring篇

首先,这几个概念要是很清楚就直接往下拉看案例

在这里插入图片描述


基础内容

🪅什么是IOC(控制反转)

控制反转,使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转,简单点说,就是创建对象的控制权,被反转到了Spring框架上

控制反转英文全称:Inversion of Control。控制反转通过依赖注入(DI)方式实现对象之间的松耦合关系。程序运行时,依赖对象由辅助程序动态生成并注入到被依赖对象中,动态绑定两者的使用关系。Spring IoC 容器就是这样的辅助程序,它负责对象的生成和依赖的注入,然后再交由我们使用。

IoC容器:具有依赖注入功能的容器,可以创建对象的容器。IoC容器负责实例化、定位、配置应用程序中的对象并建立这些对象之间的依赖。

Spring和IOC之间的关系

  • Spring技术对IOC思想进行了实现
  • Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的"外部"
  • IOC思想中的 别人[外部] 指的就是Spring的IOC容器

它可以装载bean,也是一种降低对象之间耦合关系的设计思想。(比如租房子。以前租房子需要一个房子一个房子找,费时费力,然后现在加入一个房屋中介,把你需要的房型告诉中介,就可以直接选到需要的房子,中介就相当于spring容器。)

IOC容器的作用以及内部存放

  • IOC容器负责对象的创建、初始化等一系列工作,其中包含了数据层和业务层的类对象
  • 被创建或被管理的对象在IOC容器中统称为Bean
  • IOC容器中放的就是一个个的Bean对象
  • Bean是被实例的、组装的、及被Spring容器管理的Java对象。
  • Spring容器会自动完成Bean对象的实例化。
  • 创建应用对象之间的协作关系的行为被称为:装配,这就是依赖注入的本质。

补充一下Dao层和Service层的概念:
Service是业务层,Dao是数据访问层,这样的分层是基于MVC架构来说的。

Dao层:全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表、某个实体的增删改查

Service层:被称为服务,肯定是相比之下比较高层次的一层结构,相当于将几种操作封装起来。

具体起来,Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求;
而Service,则是专注业务逻辑,对于其中需要的数据库操作,都通过Dao去实现。

简单来说就是Dao层是底层,具体到某一张表的增删查改,可以理解为有多少张表就有多少个Dao层,而Service成可以理解为是Dao层的
“上司”,通过Service层来控制Dao层。

一个Service层控制一个或者多个Dao层。


IoC入门案例

入门案例的思路:

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

步骤1:

导入Spring坐标

<!--  定义项目的依赖  -->
    <dependency>
      <groupId>org.springframework</groupId>
      <!--  配置依赖的groupId,表示所依赖的模块或组件的唯一ID  -->
      <artifactId>spring-context</artifactId>
      <!--  配置依赖的artifactId,表示所依赖的模块或组件的名称  -->
      <version>5.2.10.RELEASE</version>
      <!--  配置依赖的版本号  -->
    </dependency>

博主用的是:IntelliJ IDEA 2022.2.3 (Ultimate Edition),是会有警告的,这里不用管,因为5.2.10.RELEASE是最稳定的目前
在这里插入图片描述

步骤2:

定义Spring管理的类(接口)

public interface BookDao {
    public void save();
}
public interface BookService {
    public void save();
}

public class BookServiceImpl implements BookService {
    //5.删除业务层中使用new的方式创建的dao对象
    private BookDao bookDao;

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }
    //6.提供对应的set方法
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

步骤3:

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

在这里插入图片描述

bean定义时id属性在同一个上下文中不能重复

步骤4:

初始化IoC容器(Spring核心容器/Spring容器),通过容器获取bean

public class App {
    public static void main(String[] args) {
        BookService bookService = new BookServiceImpl();
        bookService.save();
    }
}

📬DI(Dependency Injection)依赖注入

依赖注入的概念

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

业务层要用数据层的类对象,以前是自己 new 的,现在自己不new了,靠 别人[外部其实指的就是IOC容器] 来给注入进来,这种思想就是依赖注入

IOC容器中哪些bean之间要建立依赖关系

这个需要程序员根据业务需求提前建立好关系,如业务层需要依赖数据层,service就要和dao建立依赖关系

介绍完Spring的IOC和DI的概念后,我们会发现这两个概念的最终目标就是:充分解耦

具体实现靠:

  • 使用IOC容器管理bean(IOC)
  • 在IOC容器内将有依赖关系的bean进行关系绑定(DI)
  • 最终结果为:使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系.

DI入门案例

案例思想:

在这里插入图片描述

具体实现:

在这里插入图片描述

步骤1:

删除使用new的形式创建对象的代码

public class BookServiceImpl implements BookService {
    //5.删除业务层中使用new的方式创建的dao对象
    private BookDao bookDao;

    public void save() {

        bookDao.save();
    }
}

步骤2:

提供依赖对象对应的setter方法

public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

步骤3:

配置service与dao之间的关系

在这里插入图片描述

ref对应的是bean的名称
name对应的是属性的名称

IOC相关内容

下面详细讲解这三个内容

  1. bean如何定义配置
  2. DI如何定义配置
  3. 容器对象如何获取

🔮bean基础配置

bean的语法:

<bean id="" class="">

这张表包括bean标签的功能,使用方式,id和class属性的作用

在这里插入图片描述

分割线-----------------------------------------------------------------更新中…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

函数微分和导数的定义

1.我们先来看可导的定义&#xff1a; 相信这个大家都看的懂。 2.接下来我们看可微的定义&#xff1a; 你们有没用想过为什么会有可微&#xff0c;他是用来干什么的&#xff0c;我们接下来看下面这张图&#xff0c;特别是结合图2-11来说&#xff0c; 我们可以看到书上说可微是在…

【day2】Android Jetpack Compose环境搭建

【day2】Android Jetpack Compose环境搭建 以下是适用于 Jetpack Compose 的环境要求&#xff1a; Android Studio 版本&#xff1a;4.2 Canary 15 或更高版本Gradle 版本&#xff1a;7.0.0-beta02 或更高版本Android 插件版本&#xff1a;4.2.0-beta15 或更高版本Kotlin 版本…

MySQL 幻读问题

承接上文MySQL多版本并发控制MVCC实现原理 幻读现象 因为在RR&#xff08;可重复读&#xff09;隔离级别里&#xff0c;事务1的第二次查询没有生成新的readview&#xff0c;而是用的第一次查询时生成的readview&#xff0c;所以第二次查询返回2条数据&#xff0c;而不是3条数据…

看过来,这里有JavaScript技术干货?

今天是一篇正经的技术分享&#xff0c;针对JavaScript技能的十来个专业小技巧&#xff0c;如果你想提升一下JS方面的能力成为一个更好的前端开发人员&#xff0c;那么就可以接着看下去哦。 1、使用逻辑运算符进行短路评估 您可以使用逻辑运算符进行短路评估&#xff0c;方法是…

云边协同与人工智能AI的深度融合(云端训练、边端推理)

在面向物联网、大流量等场景下&#xff0c;为了满足更广连接、更低时延、更好控制等需求&#xff0c;云计算在向一种更加全局化的分布式节点组合形态进阶&#xff0c;边缘计算是其向边缘侧分布式拓展的新触角。 以物联网场景举例&#xff0c;设备产生大量数据&#xff0c;上传到…

都2023了,学习自动化测试还有必要么?会不会浪费我时间

最近收到不少小伙伴私信提问&#xff0c;其中问得比较多的就是“学习自动化测试有那么重要吗&#xff1f;”。 我的回答是肯定的——很重要。 相信不少同学都有诸如此类的疑问&#xff0c;例如&#xff1a;“日常工作中好像用不上自动化&#xff1f;”、“手工点点点好像也可…

【从零开始学习 UVM】9.1、UVM Config DB —— UVM Resource database 资源库详解

文章目录 resource 是一个参数化的容器,可以保存任意数据。资源可用于配置组件、为序列提供数据或在TestBench不同部分之间启用信息共享。它们使用作用域信息(scope)存储,因此其可见性可以限制在TestBench的某些部分中。您可以将任何数据类型放入资源数据库中,并使另一个组…

若依后端管理系统学习日志

文章目录遇到的问题1. 自定义模块404解决方案1. 自定义后台异常返回2. 添加导入按钮3. 树形列表搜索遇到的问题 1. 自定义模块404 idea没有报错&#xff0c;但是点击进去页面显示404。 F12查看错误信息&#xff0c;原来是访问后端controller接口没有成功&#xff0c;找不到导…

上传文件—ajax

目录 一、上传图片文件 1.写基本html 完成页面主框架 2.script部分 2-0 主框架 上传文件按钮被点击触发事件 2-1验证使得否选择文件 2-2 介绍 FormData 2-3 监听onreadystatechange事件 小结 二、实现上传文件进度条 1. 在bootstrap找进度条组件 2.script 完成进度条算法…

Java锁深入理解2——ReentrantLock

前言 本篇博客是《Java锁深入理解》系列博客的第二篇&#xff0c;建议依次阅读。 各篇博客链接如下&#xff1a; Java锁深入理解1——概述及总结 Java锁深入理解2——ReentrantLock Java锁深入理解3——synchronized Java锁深入理解4——ReentrantLock VS synchronized Java锁…

QT Qwidget 事件处理机制

qlineEdit Qt事件处理是指在Qt应用程序中处理各种事件的过程。事件是指在应用程序中发生的各种操作&#xff0c;例如按键、鼠标点击、窗口移动等。Qt提供了一个事件处理机制&#xff0c;使得开发者可以对这些事件进行处理&#xff0c;以实现应用程序的各种功能。 Qt中的事件处…

CMake设置Visual Studio工程的调试环境变量和工作目录cwd的方法

1、设置在Visual Studio中调试的环境变量&#xff0c;此设置仅仅在VS中点击那个绿色三角运行时有效&#xff0c;与你直接双击打开exe文件运行无关&#xff0c;有效避免多版本动态库全部写入系统环境变量的污染问题&#xff1b; # Visual Studio中调试依赖的独立环境变量 set_p…

代码随想录算法训练营第五十天| ● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 ●总结

309.最佳买卖股票时机含冷冻期 看完题后的思路 dp[i][] 0: 第i天不持有股票的最大利润 1: 持有 递推公式 dp[i][0]max(第i-1天不持有,第i-1天持有,在第i天卖了) dp[i][1]max(第i-1天持有, 第i-2天不持有,第i天持有) 初始化 dp[0][0]0; dp[0][1]-price[i]; dp[1][0]max(x,x) d…

PCB模块化设计23——LDO线性稳压电源模块PCB布局布线设计规范

目录PCB模块化设计23——LDO线性稳压电源模块PCB布局布线设计规范一、LDO线性稳压电源组成与概念二、LDO的电路的主干道布局要点PCB模块化设计23——LDO线性稳压电源模块PCB布局布线设计规范 一、LDO线性稳压电源组成与概念 LDO线性稳压器是最基本的稳压电源变换&#xff0c;…

STM32时钟与定时器

目录 一、STM32的时钟系统 二、SysTick定时器 三、HAL_Delay的实现 四、通用定时器 一、STM32的时钟系统 概念时钟系统是由振荡器&#xff08;信号源&#xff09;、定时唤醒器、分频器等组成的电路。常用的信号源有晶体振荡器和RC振荡器。 意义时钟是嵌入式系统的脉搏&…

自然语言处理中的数据预处理:理论与实践

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

2020-2022年美赛C题信件汇总

2020-2022年美赛O奖C题写信汇总(机翻) 2020 <1> Dear Marketing Director of Sunshine Company , According to your requirements, we analyze the ratings and reviews of competitive products on Amazon for baby pacifier, microwave and hair dryer to be intro…

C++ 模板、函数模板、类模板

函数模板、类模板 文章目录函数模板、类模板前言1.模板1.1 模板的概念1.2 模板的特点2. 函数模板2.1 函数模板语法2.2 函数模板注意事项2.3 普通函数与函数模板的区别2.4 普通函数与函数模板的调用规则2.5 模板的局限性2.6 函数模板案例3. 类模板3.1 类模板语法3.2 类模板与函数…

2023年Java程序员生存指南,8个中肯建议度过寒潮!

最近小源看到一个2023Java程序员生存指南&#xff0c;觉得挺有意思的&#xff0c;今天分享给大家&#xff01; 第一&#xff0c;不要在互联网公司基于低代码做开发。 第二&#xff0c;保证一定强度的刷题&#xff0c;原因嘛你懂的~ 第三&#xff0c;凡是要求名校的岗位&#xf…

C#,码海拾贝(08)——埃特金(Aitken)逐步曲线插值算法,《C#数值计算算法编程》源代码升级改进版

埃特金逐步线性插值法&#xff08;Aitken successive linear interpolation method&#xff09;一种能逐步升阶的插值方法.用拉格朗日插值多项式计算函数近似值时&#xff0c;如果精度不满足要求&#xff0c;需增加插值节点以提高插值多项式次数时&#xff0c;原来算出的结果均…
最新文章