当前位置: 首页 > news >正文

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属性的作用

在这里插入图片描述

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

相关文章:

  • 两句话,ChatGPT帮我写一个打飞机的游戏
  • [论文解析] Cones: Concept Neurons in Diffusion Models for Customized Generation
  • formily实践经验和踩坑
  • 论文题目<mark>
  • Linux基础操作 常用命令 Centos
  • async 与 await
  • 深入理解【正则化的L1-lasso回归和L2-岭回归】以及相关代码复现
  • Linux内核设计与实现第四章学习笔记
  • <c++> 四、模板初阶
  • 两种编程思维
  • 图书馆管理系统(Java编写,思路及源代码)
  • 算法练习:动态规划(最长公共子串问题)
  • 【lm401】解决malloc动态申请内存时内存不足的问题
  • 【Python】ChineseCalendar包简介
  • 前端八股——JS高级学习
  • ES6指北【2】—— 箭头函数
  • 自己简单写的 事件订阅机制
  • __proto__ 和 prototype的关系
  • Angular4 模板式表单用法以及验证
  • es6
  • ES6 ...操作符
  • Go 语言编译器的 //go: 详解
  • Java 网络编程(2):UDP 的使用
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JS专题之继承
  • k个最大的数及变种小结
  • select2 取值 遍历 设置默认值
  • SpringCloud集成分布式事务LCN (一)
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • supervisor 永不挂掉的进程 安装以及使用
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 给Prometheus造假数据的方法
  • 给初学者:JavaScript 中数组操作注意点
  • 关于for循环的简单归纳
  • 关于使用markdown的方法(引自CSDN教程)
  • 技术胖1-4季视频复习— (看视频笔记)
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 每天10道Java面试题,跟我走,offer有!
  • 深入浏览器事件循环的本质
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 鱼骨图 - 如何绘制?
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 阿里云移动端播放器高级功能介绍
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​io --- 处理流的核心工具​
  • ​批处理文件中的errorlevel用法
  • !!java web学习笔记(一到五)
  • #stm32整理(一)flash读写
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (solr系列:一)使用tomcat部署solr服务