基于Spring 5.2.6 版本。

Spring概念

IOC容器

IOC底层原理的演进过程——本质就是为了高内聚,低耦合

在原始方式中,我们通过new创建对象来实现创建对象的逻辑,但是这样做当对象路径等发生变化时,就要修改代码,耦合度太高。

因此,我们引入了工厂模式来降低耦合,这样当我们的类发生变化要进行修改时,可以不改动调用类,而是去修改工厂类,这样就降低了耦合度。但是这样子耦合度就来到了工厂类身上。

Spring在工厂类中以配置文件加反射的方式来进一步降低耦合度,当类发生变化时,我们只需要修改配置文件而不需要去修改代码,进一步降低了耦合度,这就是IOC的本质就是一个对象工厂。

即:IOC容器 = 工厂模式 + xml解析(注解)+ 反射

Spring IOC容器相关实现类

IOC进行Bean管理

概念



基于xml方式进行bean管理

set方法注入属性



有参构造函数注入属性



p名称空间注入——为了简化set方法注入的写法,不建议使用

xml注入其他类型属性

注入null值和xml的特殊符号

字面量:指设置属性的固定值

]]> ,在mybatis的xml中的sql语句常用。

注入外部bean属性——工作中最常用方式

注入内部bean属性

如果一个bean要复用,写在外部,如果偶尔使用甚至是一次性的,用注入内部bean属性方式比较好。



级联赋值注入bean属性——建议还是用注入外部bean属性的方式





xml注入集合属性

在集合里面设置普通类型值





在集合里面设置对象类型值

提取集合作为公共部分用于注入复用



FactoryBean——工厂bean

bean的作用域





还有其他作用域(一般不使用):

request:表示bean对象在一次请求中生效。

session:表示bean对象在一次会话中生效。

bean的生命周期——重要

生命周期时指从对象创建到对象销毁的过程。





代码



xml自动装配

自动装配要求我们只要把bean实例创建出来,在bean配置上使用autowire属性值指定自动装配规则,Spring就会自动帮我们注入属性值。

手动装配就是我们自己在xml中配置property属性值。



xml读取外部属性文件——读取properties等配文件的配置

以配置德鲁伊数据库连接池为例。







基于注解方式进行bean管理







属性注入方式注解有3种

分别是@Autowired、@Qualifier、@Resource。





AOP

AOP基于动态代理实现,常见使用场景如:

  • 全局出入参日志的打印
  • 事务
  • 全局异常的捕获处理
  • 鉴权

AOP基本原理





JDK动态代理



代码示例







AOP术语



AspectJ基本概念和准备

切入点表达式(重点)



基于注解实现AspectJ——重点













抽取共同切入点写法





基于XML配置文件实现AspectJ

JDBCTemplate——相当于JDBC的封装版——了解





查询某个值——count



查询对象

查询对象列表

批量操作





事务管理

事务介绍



注解声明式事务管理



声明式事务参数配置











XML声明式事务管理





完全注解声明式事务管理——即使用配置类替换XML配置



Spring5新特性

整合slf4j2日志框架

1、引入依赖

<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.11.2</version>
</dependency>
</dependencies>

2、创建配置文件——log4j2.xml

约定:配置名是固定的,放在项目resources根目录下,否则不会生效,只会走默认没有配置下的日志打印配置。

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,可以看到log4j2内部各种详细输出-->
<configuration status="DEBUG">
<!--先定义所有的appender-->
<appenders>
<!--输出日志信息到控制台-->
<console name="Console" target="SYSTEM_OUT">
<!--控制日志输出的格式-->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</console>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<!--root:用于指定项目的根日志,如果没有单独指定Logger,则会使用root作为默认的日志输出-->
<loggers>
<root level="DEBUG">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>

@Nullable注解

Lambda表达式创建Spring容器对象

Spring5支持整合JUnit5——单元测试必备——重点





重点使用@SpringJUnitConfig复合注解来进行单元测试

SpringWebflux

核心是:基于reactor的响应式编程和基于java8的函数式编程

gateway基于webflux来实现,普通的服务基于springmvc实现,像网关这种需要处理更多的请求的场景用webflux来异步非阻塞处理请求更加方便,可以在有限的资源中处理更多的请求。

响应式编程类似于电子表格中的计算,就是观察者模式。

同步与异步,阻塞与非阻塞

拿等公交车举例:你在公交车站等公交车,你是调用者,你在等公交车时就是等着,不干其他的,就是同步,你在等车时顺便听听歌,看看新闻,就叫异步;而公交车在收到你等待它的消息时,公交车是被调用者,如果他马上回应你,等车到站了才告诉你我车到了,叫做阻塞,而如果公交车马上回应你,说我还有3分钟到站,就是非阻塞。

























基于注解编程模型















基于函数式编程模型











Spring5重点掌握点总结





参考

尚硅谷Spring5框架

Spring5基础的更多相关文章

  1. Spring Boot基础知识

    Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...

  2. SSM(Spring5.x+Mybatis3)框架搭建【解决日志问题】(Github源码)

    闲来无事,用SSM写个小东西,发现spring已经迭代到5.x了,遂出此文,希望对各位同学有些许帮助. IDE:idea OS:windows 源代码:https://github.com/JHeav ...

  3. Spring5源码解析-论Spring DispatcherServlet的生命周期

    Spring Web框架架构的主要部分是DispatcherServlet.也就是本文中重点介绍的对象. 在本文的第一部分中,我们将看到基于Spring的DispatcherServlet的主要概念: ...

  4. 零基础快速入门SpringBoot2.0教程 (四)

    一.JMS介绍和使用场景及基础编程模型 简介:讲解什么是小写队列,JMS的基础知识和使用场景 1.什么是JMS: Java消息服务(Java Message Service),Java平台中关于面向消 ...

  5. spring5源码分析系列(一)——spring5框架模块

    spring总共大约20个模块,这些模块被整合在核心容器(Core Container).AOP和设备支持.数据访问及集成.Web.报文发送.Test 6个模块集合. 组成Spring框架的每个模块集 ...

  6. 20191105 《Spring5高级编程》笔记-【目录】

    背景 开始时间:2019/09/18 21:30 Spring5高级编程 版次:2019-01-01(第5版) Spring5最新版本:5.1.9 CURRENT GA 官方文档 Spring Fra ...

  7. Spring5源码阅读环境搭建-gradle构建编译

      前沿:Spring系列生态十分丰富,涉及到各个方面.但是作为Spring生态的核心基础Spring,是最重要的环节,需要理解Spring的设计原理,我们需要解读源码.   在构建Spring源码阅 ...

  8. Spring5 of WebClient(转载)

    前言 Spring5带来了新的响应式web开发框架WebFlux,同时,也引入了新的HttpClient框架WebClient.WebClient是Spring5中引入的执行 HTTP 请求的非阻塞. ...

  9. Spring5源码分析(1)设计思想与结构

    1 源码地址(带有中文注解)git@github.com:yakax/spring-framework-5.0.2.RELEASE--.git Spring 的设计初衷其实就是为了简化我们的开发 基于 ...

随机推荐

  1. elasticsearch之拼音搜索

    拼音搜索在中文搜索环境中是经常使用的一种功能,用户只需要输入关键词的拼音全拼或者拼音首字母,搜索引擎就可以搜索出相关结果.在国内,中文输入法基本上都是基于汉语拼音的,这种在符合用户输入习惯的条件下缩短 ...

  2. docker安装、下载镜像、容器的基本操作

    文章目录 一.docker安装与基本使用 1.docker的安装.从远程仓库下载镜像 2.配置docker国内源 二.创建容器 1.create i.创建容器 ii.进入容器 iii.启动容器 2.r ...

  3. DaemonSet:每个节点都运行一个Pod

    依旧从这里开始: kubectl explain daemonset.spec 一个基础daemonset yaml, apiVersion: apps/v1 kind: DaemonSet meta ...

  4. Python如何把八进制转换成ASCII码

    做题途中拿到一串八进制字符串 0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 010 ...

  5. python第三方模块详细教程(紧急情况宝典)

    目录 一:第三方模块 第三方模块:并不是python自带的 需要基于网络下载! 使用下载第三方模块 需要将python pip添加到环境变量 1.验证pip路径添加成功 2.pycharm添加第三方模 ...

  6. dfs时间复杂度分析

    前言 之前一直想不明白dfs的时间复杂度是怎么算的,前几天想了下大概想明白了,现在记录一下. 存图方式都是链式前向星或邻接矩阵.主要通过几道经典题目来阐述dfs时间复杂度的计算方法. $n$是图中结点 ...

  7. 洛谷 P4708 画画(无标号欧拉子图计数)

    首先还是类似于无标号无向图计数那样,考虑点的置换带动边的置换,一定构成单射,根据 Burnside 引理: \[|X / G| = \frac{1}{|G|}\sum\limits_{g \in G} ...

  8. Spring系列13:bean的生命周期

    本文内容 bean的完整的生命周期 生命周期回调接口 Aware接口详解 Spring Bean的生命周期 面试热题:请描述下Spring的生命周期? 4大生命周期 从源码角度来说,简单分为4大阶段: ...

  9. JSP response.setCharacterEncoding与response.setContentType的区别

    问题描述 昨天在参考别人的项目时,发现页面引用js,css等文件总是乱码,后来才发现是MIME类型统一设置为text/html,并且仅仅编码设置了浏览器端的解析编码.另外,可以先通过文本编辑器(如no ...

  10. DLL链接库

    转载请注明来源:https://www.cnblogs.com/hookjc/ 2. 静态链接库 对静态链接库的讲解不是本文的重点,但是在具体讲解 DLL 之前,通过一个静态链接库的例子可以快速地帮助 ...