前言本系列为Redis实战系列,旨在通过实际场景学习Redis相关使用方法。本系列项目使用spring-boot-starter-data-redis(SpringDataRedis)来操作Redis。 原文地址:https://xuedongyun.cn/post/44039/ 项目流程发送验证码: 随机生成验证码 保存验证码(之前用Session,现在用Redis) 发送验证码 返回o...
前言有时,我们想要给某对象提供一个代理对象,以控制对该对象的访问。代理对象应该作为访问对象和目标对象之间的中介。Java中的代理可以分为静态代理和动态代理。静态代理类在编译期间就生成,动态代理类在Java运行时动态产生。动态代理又分为JDK代理和cglib代理两种。 原文地址:https://xuedongyun.cn/post/23348/ 代理模式的角色代理(Proxy)模式分为三种角色...
前言构造者模式:使用多个简单的对象,逐渐构建成一个复杂的对象。构造者模式属于创建型模式,它提供了一种创建对象的最佳方式 原文地址:https://xuedongyun.cn/post/24102/ 实例构造者模式包含以下角色: 抽象构造者(Builder) 具体构造者(ConcreteBuilder) 产品类(Product) 指挥者类(Director) 产品类: 1234567pub...
前言原型模式:用已经创建的实例作为原型,通过复制该原型的值来创建一个相同的新对象 原文地址:https://xuedongyun.cn/post/12331/ 浅克隆原型模式包含以下角色: 抽象原型类 具体原型类 访问类(调用clone方法) classDiagram class Prototype { <> + clone(): Prototype } c...
前言正常情况下,我们如果有PhoneStore类,其中需要有orderPhone(String type)方法,为用户提供不同的Phone。此时代码耦合十分严重,如果我们要更换或增加对象,都需要改new对象的地方。我们其实可以使用工厂类来生成对象,PhoneStore只需要和工厂打交道即可,实现最终目的:解耦 原文地址:https://xuedongyun.cn/post/33663/ 简单...
前言单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种模式涉及单一的类,需确保代码中最多只有一个该类对象被创建。 原文地址:https://xuedongyun.cn/post/25714/ 懒汉式饿汉式,在一开始就创建对象 方法一:静态成员变量123456789101112public class Singleton { // 私有化构造器 ...
前言在事务中,我们常听到脏读,不可重复读,幻读这三种概念。本文将根据例子来讨论这三种问题。同时,再依次谈谈解决上述问题的三种隔离级别。原文地址:https://xuedongyun.cn/post/64889/ 脏读脏读的定义脏读,又称为“读未提交”,就是事务A读取到了事务B已修改但未提交的数据 我们来看一个例子:假设age原本是13。事务B修改age后,被事务A读到了,但是事务B最后回滚了...
前言本文主要是在学习Spring6时的知识点拾遗,涉及多个方面,内容较为基础 原文地址:https://xuedongyun.cn/post/386/ Spring是如何创建对象的(xml) 调用了无参构造器创建对象 dom4j解析beans.xml文件,从中获取类的全类名 通过反射机制调用无参数构造方法创建对象 12Class clazz = Class.forName("com.exa...
前言依赖反转(IoC)是Spring中一个非常重要的功能。我们基于java反射机制,来尝试实现一个简单的IoC。 原文地址:https://xuedongyun.cn/post/35893/ 回顾反射获取Class对象 类名.class 1Class clazz = Car.class; 对象.getClass 12Car car = new Car();Class clazz = ...
前言在SpringBoot中,我们可以使用异步操作来处理耗时的任务。通常我们需要在想异步执行的方法上标注@Async,然后在主启动类上标注@EnableAsync开启异步功能。关于其应用,可以查看我之前的文章:SpringBoot中的@Asnyc注解。本文将讨论以下问题: @EnableAsync和@Async的原理是什么? SpringBoot中默认的线程池/执行器是如何被指定的? @A...