SSM学习之Spirng
创始人
2024-06-03 09:26:05
0

Spring

Spirng是什么?
在这里插入图片描述
大佬讲解点击急用
spirng是轻量级开源的j2ee框架 是一个容器框架,用来装javabean(java对象) 她不仅是容器框架还是中间层框架 实际还是利用装JavaBean aop这个功能 连接其他框架 structs和hibenate粘在一起使用 因为spring IOC帮我们造出对象 而不用我们自己去new 所以他能帮我们融合其他框架的对象 而不用沃尔玛呢一个个造出来

1.Spring相关概念

Spring发展到今天已经形成了一种开发的生态圈,Spring提供了若干个项目,每个项目用于完成特定的功能。

  • Spring已形成了完整的生态圈,也就是说我们可以完全使用Spring技术完成整个项目的构建、设计与开发。

  • Spring有若干个项目,可以根据需要自行选择,把这些个项目组合起来,起了一个名称叫全家桶,如下图所示

  • 在这里插入图片描述
    说明:

图中的图标都代表什么含义,可以进入https://spring.io/projects网站进行对比查看。
在这里插入图片描述

这些技术并不是所有的都需要学习,额外需要重点关注Spring FrameworkSpringBootSpringCloud:

  • Spring Framework:Spring框架,是Spring中最早最核心的技术,也是所有其他技术的基础。重点:其他所有技术依赖他执行底层框架设计框架所有东西放在上面运行
  • SpringBoot:Spring是来简化开发,而SpringBoot是来帮助Spring在简化的基础上能更快速进行开发。
  • SpringCloud:这个是用来做分布式之微服务架构的相关开发。

除了上面的这三个技术外,还有很多其他的技术,也比较流行,如SpringData,SpringSecurity等,这些都可以被应用在我们的项目中。我们今天所学习的Spring其实指的是Spring Framework

1.2 Spring系统架构

1.2.1 系统架构图

  • Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基。

  • Spring Framework的发展也经历了很多版本的变更,每个版本都有相应的调整 这里我们才有SpringFramework4.0技术
    在这里插入图片描述
    (1)核心层

  • Core Container:核心容器,这个模块是Spring最核心的模块,其他的都需要依赖该模块 对于容器而言就是装东西 java程序就一种东西可以装 就是对象 Spring就是用来管对象

(2)AOP层 aop依赖核心容器执行core container

  • AOP:面向切面编程,它依赖核心层容器,目的是在不改变原有代码的前提下对其进行功能增强 aop是教你程序应该如何做
  • Aspects:AOP是思想,Aspects是对AOP思想的具体实现 它是真正实现了aop

(3)数据层

  • Data Access:数据访问,Spring全家桶中有对数据访问的具体实现技术
  • Data Integration:数据集成,Spring支持整合其他的数据层解决方案,比如Mybatis
  • Transactions:事务,Spring中事务管理是Spring AOP的一个具体实现,也是后期学习的重点内容

(4)Web层

  • 这一层的内容将在SpringMVC框架具体学习

(5)Test层

  • Spring主要整合了Junit来完成单元测试和集成测试

1.2.2学习路线

介绍完Spring的体系结构后,从中我们可以得出对于Spring的学习主要包含四部分内容,分别是:

  • Spring的IOC/DI
  • Spring的AOP
  • AOP的具体应用,事务管理
  • IOC/DI的具体应用,整合Mybatis

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

1.3 Spring核心概念

1.3.1 目前项目中的问题

要想解答这个问题,就需要先分析下目前咱们代码在编写过程中遇到的问题:
在这里插入图片描述
(1)业务层需要调用数据层的方法,就需要在业务层new数据层的对象

(2)如果数据层的实现类发生变化,那么业务层的代码也需要跟着改变,发生变更后,都需要进行编译打包和重部署
(3)所以,现在代码在编写的过程中存在的问题是:耦合度偏高
针对这个问题,该如何解决呢?

我们就想,如果能把框中的内容给去掉,不就可以降低依赖了么,但是又会引入新的问题,去掉以后程序能运行么?

答案肯定是不行,因为bookDao没有赋值为Null,强行运行就会出空指针异常。

所以现在的问题就是,业务层不想new对象,运行的时候又需要这个对象,该咋办呢?

针对这个问题,Spring就提出了一个解决方案:

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

这种实现思就是Spring的一个核心概念

1.3.2 IOC、IOC容器、Bean、DI

在这里插入图片描述
在这里插入图片描述
原来是new出来的 现在不能new的 来个ioc容器 把对象放入ioc容器中。
由ioc容器帮你创建对象 对象由ioc容器提供 dao对象bookdao可以放入 bookserviceimp也能放入啊 IOC容器可以管理大量对象创建和初始化 你对象不用自己造 我帮你造,我造给你的对象叫bean对象 我给你
在这里插入图片描述
现在我们程序运行需要Service对象 IOC容器直接调用Service对象 你把程序运行起来看看 这个程序有问题 你的service方法需要dao对象调用的方法 而你的save方法需要dao对象方法才能运行 你运行还是报错 IOC看到你的Service对象依赖dao对象运行 巧了 这两对象都在ioc容器中 所以ioc容器把这活给你干了 也就是service和dao对象的依赖关系帮你干了 也就是绑定上
也就是在这里插入图片描述
你现在要的dao对象直接给到你 这样你就能直接运行了 这种思想叫IDI 依赖注入
在这里插入图片描述
容器中如果bean与bean之间存在依赖关系 则IOC容器自动帮你绑定好 绑定关系的过程叫依赖注入

  1. IOC(Inversion of Control)控制反转

(1)什么是控制反转呢?

  • 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。
    • 业务层要用数据层的类对象,以前是自己new
    • 现在自己不new了,交给别人[外部]来创建对象
    • 别人[外部]就反转控制了数据层对象的创建权
    • 这种思想就是控制反转
    • 别人[外部]指定是什么呢?继续往下学

(2)Spring和IOC之间的关系是什么呢?

  • Spring技术对IOC思想进行了实现
  • Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的"外部"
  • IOC思想中的别人[外部]指的就是Spring的IOC容器
    一句话 由主动new出对象转换为IOC容器提供对象

(3)IOC容器的作用以及内部存放的是什么?

  • IOC容器负责对象的创建、初始化等一系列工作,其中包含了数据层和业务层的类对象
  • 被创建或被管理的对象在IOC容器中统称为Bean
  • IOC容器中放的就是一个个的Bean对象

(4)当IOC容器中创建好service和dao对象后,程序能正确执行么?

  • 不行,因为service运行需要依赖dao对象
  • IOC容器中虽然有service和dao对象
  • 但是service对象和dao对象没有任何关系
  • 需要把dao对象交给service,也就是说要绑定service和dao对象之间的关系
  • 像这种在容器中建立对象与对象之间的绑定关系就要用到DI:
  1. DI(Dependency Injection)依赖注入

1)什么是依赖注入呢?

  • 在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
    • 业务层要用数据层的类对象,以前是自己new
    • 现在自己不new了,靠别人[外部其实指的就是IOC容器]来给注入进来
    • 这种思想就是依赖注入

(2)IOC容器中哪些bean之间要建立依赖关系呢?

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

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

  • 使用IOC容器管理bean(IOC)

  • 在IOC容器内将有依赖关系的bean进行关系绑定(DI)

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

1.3.3 核心概念

1.3.3 核心概念小结

这节比较重要,重点要理解什么是IOC/DI思想什么是IOC容器什么是Bean

(1)什么IOC/DI思想?

  • IOC:控制反转,控制反转的是对象的创建权
  • DI:依赖注入,绑定对象与对象之间的依赖关系

(2)什么是IOC容器?

Spring创建了一个容器用来存放所创建的对象,这个容器就叫IOC容器

(3)什么是Bean?

容器中所存放的一个个对象就叫Bean或Bean对象在这里插入图片描述

2.1.1 入门案例思路分析

idea中source目录和resource目录的作用 resource添加依赖 source主要用来保存java文件且打包后汇编编译成class文件 而resource则是直接复制不会变成class文件

(1)Spring是使用容器来管理bean对象的,那么管什么?

  • 主要管理项目中所使用到的类对象,比如(Service和Dao)

(2)如何将被管理的对象告知IOC容器?

  • 使用配置文件 也就是配置bean

(3)被管理的对象交给IOC容器,要想从容器中获取对象,就先得思考如何获取到IOC容器?

  • Spring框架提供相应的接口

(4)IOC容器得到后,如何从容器中获取bean?

  • 调用Spring框架提供对应接口中的方法

(5)使用Spring导入哪些坐标?

用别人的东西,就需要在pom.xml添加对应的依赖

applicationContext.xml 文件配置
项目结构
在这里插入图片描述

* 










BookDaoImpl

public class BookDaoImpl implements BookDao {public void save() {System.out.println("book dao save ...");}
}

BookServiceImpl

public class BookServiceImpl implements BookService {private BookDao bookDao = new BookDaoImpl();public void save() {System.out.println("book service save ...");bookDao.save();}
}

App2.java

import org.springframework.context.support.ClassPathXmlApplicationContext;public class App2 {public static void main(String[] args) {
//        步骤6:获取IOC容器 创建  ApplicationContext接口的实现类 括号内填写配置文件路径配置对应的容器 getBean 方法的参数要和 spring-config.xml 配置文件中的 id 对应ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
// 步骤7:从容器中获取对象进行方法调用 获取bean
//        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
//        bookDao.save();BookService bookService = (BookService) ctx.getBean("bookService");bookService.save();}
}

book service save …
book dao save …

2.2.1 入门案例思路分析

(1)要想实现依赖注入,必须要基于IOC管理Bean

  • DI的入门案例要依赖于前面IOC的入门案例

(2)Service中使用new形式创建的Dao对象是否保留?

  • 需要删除掉,最终要使用IOC容器中的bean对象

(3)Service中需要的Dao对象如何进入到Service中?

  • 在Service中提供方法,让Spring的IOC容器可以通过该方法传入bean对象
  • 比如setBookDao方法

(4)Service与Dao间的关系如何描述?

  • 使用配置文件

2.2.2 入门案例代码实现

需求:基于IOC入门案例,在BookServiceImpl类中删除new对象的方式,使用Spring的DI完成Dao层的注入

1.删除业务层中使用new的方式创建的dao对象

2.在业务层提供BookDao的setter方法

3.在配置文件中添加依赖注入的配置

4.运行程序调用方法

步骤1: 去除代码中的new

在BookServiceImpl类中,删除业务层中使用new的方式创建的dao对象
BookServiceimpl.java

public class BookServiceImpl implements BookService {//5.删除业务层中使用new的方法创建的dao对象private BookDao bookDao;public void save() {System.out.println("book service save ...");bookDao.save();}//6.提供对应的set方法 这个方法是谁调用的?重点 这个set方法是容器执行的public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}
}
步骤2:为属性提供setter方法

在BookServiceImpl类中,为BookDao提供setter方法

public class BookServiceImpl implements BookService {//5.删除业务层中使用new的方法创建的dao对象private BookDao bookDao;public void save() {System.out.println("book service save ...");bookDao.save();}//6.提供对应的set方法 这个方法是谁调用的?重点 这个set方法是容器执行的public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}
}
步骤3:修改配置完成注入

在配置文件中添加依赖注入的配置















注意:配置中的两个bookDao的含义是不一样的

  • name="bookDao"中bookDao的作用是让Spring的IOC容器在获取到名称后,将首字母大写,前面加set找对应的setBookDao()方法进行对象注入
  • ref="bookDao"中bookDao的作用是让Spring能在IOC容器中找到id为bookDao的Bean对象给bookService进行注入
  • 综上所述,对应关系如下:
  • 在这里插入图片描述
  • 这两对象都在ioc容器帮你创建好并在容器中中 所以ioc容器把这活给你干了 也就是service和dao对象的依赖关系帮你干了 也就是绑定上也就是你现在要的dao对象直接给到你 这样你就能直接运行了 这种思想叫IDI 依赖注入 容器中如果bean与bean之间存在依赖关系 则IOC容器自动帮你绑定好 绑定关系的过程叫依赖注入

3.1.1 bean基础配置(id与class)

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...