- 博客(36)
- 资源 (1)
- 收藏
- 关注

原创 spring源码(1)、idea编译spring源码详细教程
以下源码编译过程是本人按照官方文档实操,并结合国情对一些下载源修改为国内源,如果你是新手建议每一步都安装本教程操作,确保不会出现一些奇葩问题 下载spring源码 建议去码云下载,github下载会比较慢,地址:https://gitee.com/mirrors/Spring-Framework,建议下载标签中的正式版本,我这里下载的是v5.2.0.RELEASE 仓库修改为阿里云 下载源码并解压后,进入Spring-Framework目录修改build.gradle,需要修改两处:
2020-09-06 09:45:37
2685
2
原创 spring源码(2)、资源&资源加载器
对于每一个底层资源,比如文件系统中的一个文件,classpath上的一个文件,或者一个以URL形式表示的网络资源,Spring 统一使用 Resource 接口进行了建模抽象,相应地,对于这些资源的加载,Spring使用了 ResourceLoader 进行了统一建模抽象。Spring对各种底层资源,比如文件系统中的一个文件,classpath上的一个文件,或者一个网络URL,统一抽象为接口Resource来表示。6 否则将其封装成一个UrlResource句柄返回;4 如果路径是URL格式。
2023-01-03 13:59:48
407
原创 javassist学习
Java 字节码以二进制的形式存储在 .class 文件中,每一个 .class 文件包含一个 Java 类或接口。Javaassist 就是一个用来 处理 Java 字节码的类库。它可以在一个已经编译好的类中添加新的方法,或者是修改已有的方法,并且不需要对字节码方面有深入的了解。同时也可以去生成一个新的类对象,通过完全手动的方式。在 Javassist 中,类表示 class 文件。
2023-01-03 13:00:43
462
原创 设计模式—行为型—备忘录模式
备忘录模式备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式优缺点:备忘录模式是一种对象行为型模式,其主要优点如下。提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。 实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。 简化了发起人类。发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在
2021-02-08 11:10:34
146
原创 设计模式—行为型—状态模式
状态模式对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。角色环境类(Context)角色:也称为上下文,它定义了客户端需要的接口,内部维护一个当前状态,并负责具体状态的切换。 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为,可以有一个或多个行为。 具体状态(Concrete State)角色:实现抽象状态所对应的行为,并且在需要的情况下进行状态切换。类图状态模式一般用来实现状态机,而状态机常用
2021-02-07 17:29:17
192
原创 配置阿里yum源
1、备份mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/CentOS 5wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.a
2021-02-07 16:22:32
515
原创 设计模式—结构型
结构型模式主要、关注如何将现有类或对象组织在一起形成更加强大的结构,总结了一些类或对象组合在一起的经典结构,这些经典的结构可以解决特定应用场景的问题。结构型模式包括:代理模式 桥接模式 装饰器模式 适配器模式 门面模式 组合模式 享元模式1. 代理模式 代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,这是它跟装饰器模式最大的不同。一般情况下,我们让代理类和原始类实现同样的接口。但是,如果原始类并没有定义接口,并且原始类代码并...
2021-02-07 15:42:12
198
原创 设计模式—行为型—访问者模式
表示一个作用于某对象结构中的各元素的操作,它使你可以不改变个元素的类的前提下定义作用于这些元素的操作。访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接收这个操作的数据结构则可以保持不变访问者模式适用于数据结构未定的系统,它把数据结构和作用于数据结构上的操作之间的耦合解脱开,使得操作集合可以相对的演化角色抽
2021-02-05 17:17:38
359
原创 设计模式—行为型—备忘录模式
在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。角色:1.Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。Originator可以根据需要决定Memento存储自己的哪些内部状态。2.Memento(备忘录):负责存储Orig
2021-02-05 16:38:29
446
原创 设计模式—行为型—中介者模式
用一个中介对象来封装一系列的对象交互。中介是各个对象不需要现实的相互引用。从而使其耦合松散。而且可以独立的改变他们之间的交互角色:Mediator:中介者接口。在里面定义了各个同事之间相互交互所需要的方法,可以是公共的方法,如Change方法,也可以是小范围的交互方法。ConcreteMediator:具体的中介者实现对象。它需要了解并为维护每个同事对象,并负责具体的协调各
2021-02-05 16:18:11
374
原创 设计模式—行为型—命令模式
命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作将一组行为抽象为对象,实现“行为请求者”与“行为实现者”的松耦合。这就是命令模式模式结构 Command:定义命令的接口,声明执行的方法。ConcreteCommand:命令接口实现对象,是“虚”的实现;通常会持有接收者,并调用接
2021-02-05 15:20:51
292
原创 设计模式—行为型—迭代模式
迭代模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。它可以使得对于聚合对象的遍历行为和聚合对象分离,即我们不关心聚合对象的底层结构是什么样子迭代模式中的角色迭代器角色(Iterator): 负责定义访问和遍历元素的接口。具体迭代器角色(Concrete Iterator):实现迭代器接口,并要记录遍历中的当前位置。容器角色(Container
2021-02-05 14:43:22
577
原创 设计模式—行为型—责任链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接受者间的耦合,将这些对象连成一条链,并向这条链传递请求,直到有个对象处理它为止。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。责任链模
2021-02-05 13:18:07
305
原创 设计模式—行为型—模板方法
使用模板方法的意图是:定义一个操作算法中的骨架,将一些步骤延迟到子类当中。使得子类不改变算法结构,可重新定义该算法的一些步骤。简单说来就是:父类实现算法不变的部分以避免代码重复,将特定的可变的行为留给子类实现,也就是所谓的“重分解以一般化”原则。类图模板方法是常用的一种代码复用的基本技巧。代码:public interface ITemplate
2021-02-05 10:15:36
557
原创 设计模式—行为型—策略模式
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户角色:抽象策略角色Strategy: 策略类,通常由一个接口或者抽象类实现。具体策略角色ConcreteStrategy:包装了相关的算法和行为。环境角色Co
2021-02-04 17:26:09
387
原创 设计模式—结构型— 解释器模式
解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式(Interpreter Pattern)是一种按照规定语法进行解析的方案,实际很少有用到。角色(1)抽象表达式(Expression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interp
2021-02-04 16:24:03
326
原创 设计模式—结构型—观察者模式
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象。这个主体对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。角色抽象主体角色:主题角色把所有对观察者对象引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象被观察者角色,一般用一个抽象类或者一个接口实现抽象观察者角色:把所有的具体观察者定义一个接口,在得到主题的通知时更新自己,这个接口叫做更新接
2021-02-04 15:22:24
625
原创 设计模式—设计原则
1.单一原则 一个类或者模块只负责完成一个职责(或者功能),也就是说,不要设计大而全的类,要设计粒度小、功能单一的类。换个角度来讲就是,一个类包含了两个或者两个以上业务不相干的功能,那我们就说它职责不够单一,应该将它拆分成多个功能更加单一、粒度更细的类。单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可读性、可维护性。public class UserInfo { private long userId; private String username;...
2020-10-14 15:13:06
242
原创 设计模式—结构型—享元模式
享元模式:运用共享技术有效的支持大量细粒度对象,也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。如果一个应用使用了大量的对象,这些对象造成了很大的系统开销就应该考虑使用享元模式角色:抽象享元角色:此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口或抽象类。具体享元(ConcreteFlyweight)角色:实现抽象享元角色
2020-10-12 16:12:20
283
原创 设计模式—结构型—组合模式
将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素
2020-10-12 15:42:51
459
原创 设计模式—结构型—门面模式
为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。角色门面(facade):客户端可以调用这个角色的方法,此角色知道相关子系统的功能和责任。在正常情况下,本角色会将所有客户端发来的请求委派到响应的子系统去。子系统(subSystem):可以同时有一个或多个子系统,每一个子系统都不是一个单独的类,而是一个类的集合,每一个子系统都可以被单独调用,
2020-10-12 15:29:57
402
原创 设计模式—结构性—适配器模式
将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。适配器有两种形式类适配器和对象适配器场景:1、已经存在的类的接口不符合我们的需求;2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;3、在不对每一个都进行子类化以匹
2020-10-12 14:55:40
383
原创 设计模式—结构型—装饰者模式
在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。动态的给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比子类更加灵活装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为角色 (1)抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。 (2)具体构件(Co
2020-10-12 14:28:22
474
原创 设计模式—结构型—桥接模式
桥接模式将抽象部分与实现部分分离,使它们都可以独立的变化。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间耦合类图 代码package com.sun.bridging;/** * 手机抽象类 */public abstract class Mobile { pu
2020-10-12 13:39:49
329
原创 设计模式—结构型—代理模式
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。角色:抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。真实角色:实现抽象角色,定义真实角色所要实现的业
2020-10-12 11:13:26
372
原创 设计模式—创建型
创建型模式关注对象的创建过程,它将对象的创建和使用分离,在使用对象时无须知道对象的创建细节,使整个系统的设计更加符合单一职责原则,通俗的说它主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。创建性模式有五种:1.工厂模式 ①简单工厂模式(经常被用到,不属于GoF23种设计模式) ②工厂方法模式 ③抽象工厂模式2.建造者模式3.原型模式4.单例模式工厂模式 工厂模式包括简单工厂、工厂方法、抽象工厂这 3 种细分模式...
2020-10-10 13:46:36
217
原创 设计模式—创建型—原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。角色:①简单形式的原型模式抽象原型:通常由接口或者抽象类组成,此角色给出所有原型所需要的接口。具体原型:被复制对象,此角色通常要实现所有抽象原型所要求的接口②登记形式的原型模式抽象原型:通常由接口或者抽象类组成,此角色给出所有原型所需要的接口。具体原型:被复制对象,此角色通常要实现所有抽象原型所要求的接
2020-10-10 13:35:10
478
原创 设计模式—创建型—单例模式
单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式的要点有三个:一是某个类只能有一个实例二是它必须自行创建这个实例三是它必须自行向整个系统提供这个实例从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数二是类定义中含有一个该类的静态私有对象三是该类提供了一个静态的共有的函数用于创建或获取它本身的静态私有对象懒汉式单例
2020-10-10 11:29:48
372
原创 设计模式—创建型—建造者模式
将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。角色1 builder抽象建造者:为创建一个产品对象的各个部件指定抽象接口。2 ConcreteBuilder具体建造者:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。3 Director指挥者:构造一个使用Build
2020-10-10 10:27:56
401
原创 设计模式—创建型—工厂方法模式
工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。角色:抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创
2020-10-09 14:20:40
396
原创 设计模式—创建型—抽象工厂模式
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与
2020-10-09 11:17:58
459
原创 设计模式—创建型—简单工厂(又叫静态工厂方法,不属于GOF23中设计模式)
简单工厂模式属于类的创新型模式,又叫静态工厂方法模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。——————————————————————————————————————————————————————————————角色工厂角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
2020-10-09 11:16:26
1243
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人