小小白的SSM学习笔记——Spring5学习

2024-03-07 01:30

本文主要是介绍小小白的SSM学习笔记——Spring5学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 学习笔记仅为个人学习记录,如有错误望各位大佬不吝赐教!学习视频资源:[遇见狂神说](https://space.bilibili.com/95256449?from=search&seid=5212369959759283056)
  • Spring5
    • 一、了解历史
      • 1.1发展
      • 1.2What is Spring?
      • 1.3什么是最少侵入?
        • 侵入式:
        • 非侵入式
        • 非侵入式的技术体现
        • 如何实现非侵入式
      • 1.4、SSH和SSM
      • 1.5、Spring的优点
      • 1.6、Spring的组成和扩展
    • 二、IOC理论
    • 三、HelloSpring
    • 四、IoC创建对象的方式
      • 1、使用对象的无参构造创建对象(默认)(**没有无参构造会报错**)
      • 2、使用有参构造
    • 五、Spring配置
      • 1、Alias
      • 2、Bean
      • 3、import
    • 六、依赖注入
      • 为什么要使用依赖注入
      • 6.1、构造器注入
      • 6.2、Set方式注入(重点)
        • 普通属性
        • 数组
        • List
        • Set
        • Map
        • Properties
        • 引用类型
        • Null
      • 6.3、扩展方式注入
      • 6.4、Bean的作用域(Scope)
        • 1. 单例(Singleton)
        • 2. 原型(prototype)
    • 七、自动装配(Autowire)
      • 7.1、byName自动装配
      • 7.2、byType自动装配
      • 7.3、使用注解自动装配
        • 小知识
    • 八、使用注解开发
      • 8.1、bean
      • 8.2、属性注入
      • 8.3、衍生注解
      • 8.4、自动装配注解
      • 8.5、作用域
    • 九、完全使用Java配置(JavaConfig)
      • 9.1、使用JavaConfig创建bean
    • 九、【新增】xml、注解和Java Config到底选哪个
    • 十、AOP
      • 定义:什么是AOP
      • 问题:为什么要使用AOP
      • AOP术语
      • AOP常用场景
      • ==**五种类型的Advice**==
    • 十一、spring实现AOP
      • 方式一:使用Spring的API接口
      • 方式二:自定义类【切面定义】
      • 方式三:使用注解实现
    • 十二、整合Mybatis
      • 12.1、回忆Mybatis
      • 12.2、整合Mybatis
        • 方式一
        • 方式二
    • 十三、声明式事务
      • 回顾事务:
      • ACID原则:
      • Spring管理事务的方式
      • 使用Spring管理事务
        • 结合AOP实现事务的织入
      • ACID原则:
      • Spring管理事务的方式
      • 使用Spring管理事务
        • 结合AOP实现事务的织入

学习笔记仅为个人学习记录,如有错误望各位大佬不吝赐教!学习视频资源:遇见狂神说

Spring5

image-20200329214859171

一、了解历史

Java?Spring?春天?他们之间到底有怎样的联系?

  • spring的缔造者Rod Johnson
  • 一本名为Expert one-on-one J2EE Development without EJB的书
  • 关于EJB(Enterprise Java Beans)又被称为 “企业Java Beans”

关于Spring的发展起源要回溯到2002年,当时正是Java EE和EJB大行其道的时候,很多知名公司都是采用此技术方案进行项目开发。这时候有一个小伙子认为 EJB 太过臃肿,并不是所有的项目都需要使用 EJB 这种大型框架,应该会有一种更好的方案来解决这个问题。

他提出了一个基于普通 Java 类(POJO)和依赖注入的更简单的解决方案。

他展示了如何在不使用 EJB 的情况下构建高质量、可扩展的在线座位预留系统。为了构建应用程序,他编写了超过 30,000 行的基础结构代码,项目中的根包命名为 com.interface21,所以人们最初称这套开源框架为 interface21,这就是 Spring 的前身。

**“轮子理论”,也即“不要重复发明轮子”,这是西方国家的一句谚语,原话是:Don’t Reinvent the Wheel。**Spring就是在“不重复发明轮子”的理念及指导原则上做起来。

1.1发展

2003 年 Rod Johnson 和同伴在此框架的基础上开发了一个全新的框架命名为 Spring,据 Rod Johnson 介绍 Spring 是传统 J2EE 新的开始,随后 Spring 发展进入快车道。

  • 2004 年 03 月,1.0 版发布。
  • 2006 年 10 月,2.0 版发布。
  • 2007 年 11 月,更名为 SpringSource,同时发布了 Spring 2.5。
  • 2009 年 12 月,Spring 3.0 发布。
  • 2012年 Rod Johnson宣布离开Spring
  • 2013 年 12 月,Pivotal 宣布发布 Spring 框架 4.0。
  • 2017 年 09 月,Spring 5.0 发布。

1.2What is Spring?

通常, Spring 是指一个用于构造 JAVA 应用程序的轻量级框架

  1. 你可以采用 Spring 来构造任何程序
  2. Spring 是轻量级的,意味着你只需对你的程序代码做很少改动。(最少的侵入)
  3. Spring 核心本身——很多附加的 Spring 组件,比如数据访问,需要与 Spring 框架有相对紧密得多的耦合关系。

1.3什么是最少侵入?

侵入式:

侵入式的做法是要求业务代码”知道”框架的代码,表现为业务代码需要继承框架提供的类,才能很好的和框架结合,使用框架带来的便利。

侵入式让业务代码产生对框架的依赖,这些代码不能在框架外使用,不利于代码的复用。

但是,可以使用户和框架更好的结合,更容易更充分的利用框架提供的功能

非侵入式

非侵入式则不需要业务代码引入框架代码的信息,即无需继承框架提供的类,从编写者的角度来看,察觉不到框架的存在。

可以很方便的迁移到其他地方使用,代码的复用性较好。

但是框架和业务代码互动的方式可能就比较复杂

非侵入式的技术体现

允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必须继承或实现Spring框架的类和接口来达到使用框架的目的。

如何实现非侵入式
  1. 引用==反射机制==,通过动态调用的方式来提供各方面的功能,建立核心组件BeanFactory
  2. 配合使用Spring框架中的==BeanWrapper和BeanFactory组件类==最终达到对象的实例创建属性注入

1.4、SSH和SSM

SSH:Structs + Spring + Hibernate

SSM:SpringMVC + Spring + MyBatis

1.5、Spring的优点

  1. Spring是一个开源的免费的框架(容器)
  2. Spring是一个轻量级的、非入侵式的框架
  3. 控制反转(IOC)、面向切面编程(AOP)
  4. 支持事务的处理,对框架整合的支持

1.6、Spring的组成和扩展

  • 七大模块:

img

  • SpringBoot
    • 一个快速开发的脚手架
    • 基于SpringBoot可以快速地开发单个微服务
  • SpringCloud
    • 基于SpringBoot实现

二、IOC理论

IOC:(Inversion of Control)控制反转

传统开发,我们需要对于客户的不同需求修改代码创建不同的对象,对象的创建由开发者控制,而新模式的开发,应该是由调用者去决定对象的创建,且不影响源代码。

使用了set注入后,程序的所有对象由Spring为我们注入,开发人员只需搭建好框架,写好配置文件即可。

系统的耦合性降低,(松耦合) 更加专注于业务的开发。

控制反转主动权由程序员转换到用户

由于是"获得依赖对象的过程被反转了"

**依赖注入(Dependency Injection,DI)**则是控制反转的一种实现,所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

其实IOC也好DI也好都是通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦

举例:

对象A依赖于对象B,当对象 A需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象A。IOC容器就是一个对象制造工厂,你需要什么,它会给你送去,你直接使用就行了,而再也不用去关心你所用的东西是如何制成的,也不用关心最后是怎么被销毁的,这一切全部由IOC容器包办。

传统的实现中,由程序内部代码来控制组件之间的关系。我们经常使用new关键字来实现两个组件之间关系的组合,这种实现方式会造成组件之间耦合。

[参考博客]https://blog.csdn.net/love_everybody/article/details/79836136?depth_1-utm_source=distribute.pc_relevant.none-task

控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入。

三、HelloSpring

  1. 导入官方xml配置(直接创建Spring)

    <?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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="..." class="...">  <!-- collaborators and configuration for this bean go here --></bean><bean id="..." class="..."><!-- collaborators and configuration for this bean go here --></bean><!-- more bean definitions go here --></beans>
    
    The id attribute is a string that identifies the individual bean definition.
    The class attribute defines the type of the bean and uses the fully qualified classname.
  2. 容器中创建对象

    xml配置文件中 使用标签创建对象,标签中使用标签设置属性值,前提是对应的实体类中有相应的 SET 方法。

    <bean id="hello" class="com.sakura.pojo.Hello"><property name="msg" value="Spring"/>
    </bean>
    
    name:对应于当前对象的属性名
    value:设置对应的属性值
    ref:当属性并不是普通类型时,而是引用类型时, 通过ref 指定引用对象的 bean的id
    • ref 和 id 之间的这种联系表达了协作对象之间的依赖关系
  3. 从容器中获取对象

    @Test
    public void helloTest() {// 获取Spring的上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");// 我们的对象存放在Spring的容器中,使用时取出即可Hello bean = (Hello) context.getBean("hello");System.out.println(bean);}
    }
    

    Spring的Resource,它提供了一种从 URI 语法中定义的位置读取 InputStream 的便捷机制。

    image-20200329102629616

    ClassPathXmlApplicationContext只是ApplicationContext接口众多实现类的一种,因为此处我们使用xml配置文件,所以使用CPX,而当我们使用注解配置时,又需要用到另一个实现类AnnotationConfigApplicationContext

到这我们再去修改传统开发的代码:

第一版

public class UserServiceImp implements UserService {//  SqlDao sqlDao = new MysqlImp();SqlDao sqlDao = new OracleImp();/** 以上传统的方式需要我们通过用户的需求,频繁修改代码。*/@Overridepublic void getSqlResource() {sqlDao.getSql();}
}

当我们想要使用同一个接口的不同实现类的方法时,就需要频繁改变组合的对象(使用哪个new哪个)。。为了避免这种情况,我们可以只组合好相应的接口,增加Set方法,由调用者来决定使用哪个实现类

第二版

private SqlDao sqlDao;

public class UserServiceImp implements UserService {/** 以下使用Set方法实现控制反转*/// 组合接口private SqlDao sqlDao;// set方法控制 具体实现类public void setSqlDao(SqlDao sqlDao) {this.sqlDao = sqlDao;}@Overridepublic void getSqlResource() {sqlDao.getSql();}
}

修改后,业务代码无需变更,调用者通过Set方法来指定具体的实现类 即可,依赖的获取过程从开发人员创建对象,转换为 用户自定义选择,IoC的本质就是如此,进一步修改,使用SpringIoC容器

第三版

<bean id="mysql" class="com.sakura.dao.MysqlImp"/>
<bean id="oracle" class="com.sakura.dao.OracleImp"/>
<bean id="sqlserver" class="com.sakura.dao.SqlServerImp"/><bean id="sqlService" class="com.sakura.service.UserServiceImp"><property name=&#

这篇关于小小白的SSM学习笔记——Spring5学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/782017

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备