自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 计算机基本工作原理

前提知识注解底层原理:

2022-04-29 11:44:17 320

原创 循环依赖-三级缓存

循环依赖概念spring容器帮助我们管理对象,简称Bean,大多数情况下我们都是使用单例bean,也就是从容器中重复利用这个Bean,在生成Bean的过程中需要为某些成员变量赋值,比如现在有类A和B被spring容器管理,A类中有个依赖容器成员变量B,B类中有个依赖容器的成员变量A。@Componentpublic class A { @Autowired private B b;}@Componentpublic class B{ @Autowired private A a;}

2022-04-26 21:43:55 1563

原创 refresh之finishBeanFactoryInitialization(beanFactory)

finishBeanFactoryInitialization(beanFactory)这个方法是来实例化所有的非懒加载的Bean的,在前面已经将配置文件解析成了beanDefinition,现在准备生产,这个过程涉及来几个重要的概念bean的生命周期循环依赖三级缓存bean的后置处理器protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) { // Initia

2022-04-24 20:47:57 563

原创 解析配置文件之ConfigurationClassPostProcessor

前面有提及到在beanDefinition后置处理器阶段会去执行ConfigurationClassPostProcessor重写的postProcessBeanDefinitionRegistry方法@Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) { int registryId = System.identityHashCode(registry); if (th

2022-04-19 15:25:08 513

原创 refresh之invokeBeanFactoryPostProcessors

invokeBeanFactoryPostProcessors翻译过来就是执行beanDefinition后置处理器的意思,所以这个方法就是bean定义的扩展点了,第一篇已经介绍过了后置处理器的相关概念,下面先介绍几个属性regularPostProcessors:用来存放BeanFactoryPostProcessorregistryProcessors:用来存放BeanDefinitionRegistryPostProcessorcurrentRegistryProcessors:临时变量,也是

2022-04-17 16:52:25 83

原创 基于配置类的Spring容器启动流程

下面将运行一个最基本的Demo,从容器获取C对象,直接Debug源码看看做了什么AnnotationConfigApplicationContext类图,主要做了3件事情查看父类GenericApplicationContext的构造方法,发现创建了一个DefaultListableBeanFactory,public GenericApplicationContext() { this.beanFactory = new DefaultListableBeanFactory(); }

2022-04-16 23:28:53 467

原创 Spring源码前置概念

BeanDefinitionbeanDefinition表示Bean定义,是spring用来生产实例Bean的元数据,如@Component,@Bean,标签等都会解析成bean定义供后续spring容器去生产bean实例。有以下几个主要的属性。scope:表示bean的作用域,如单例beansingleton(默认),多例prototype,request每次请求重新实例化,Session每个会话对内是单例的lazyInit:是否需要懒加载,懒加载在第一次使用bean时才会被实例化,非懒加载在s

2022-04-16 15:36:42 203

原创 组合-模式

处理树形结构,叶子节点和子树。如操作系统的文件 看作(叶子节点)/文件夹看作(子树);软件系统的菜单结构也是树形,具体选项看作(叶子节点)/二级菜单看作(子树)。组合模式就是要为叶子节点和子树抽象出统一的接口,叶子节点进行具体操作,子树进行递归处理。以文件系统为例。我要给某个路径下的所有文件进行杀毒。为文件和文件夹抽象出一个公共抽象类AbstractFileinterface AbstractFile{ public void add(AbstractFile abstractFile);

2021-12-27 21:45:52 182

原创 桥接-模式

将抽象部分与实现部分解耦。比如蜡笔的颜色和型号,3种型号的蜡笔(大,中,小),4种颜色(红,黄,蓝,绿)。需要准备12只蜡笔。而反观毛笔,只需要准备3只再加上4盘颜料,7件。这就是将颜色和型号解耦。之后添加毛笔或者颜色都要比蜡笔来的好。通过颜料盒来当作颜色和毛笔之间的桥梁。...

2021-12-26 01:19:44 119

原创 适配器模式

适配适配,说到底就是将老旧代码的功能组合成一个新类。比如我以前有排序类进行排序,有二分查找类进行二分查找,代码太复杂了,我找不到我也不敢随随便便改代码。现在有一个新需求,需要将学生的成绩进行排序或查找排名将需求抽象interface Score{ int [] sort(int arr[]); int binarySearch(int arr[],int score);}排序老代码class Sort{ int [] sort(int arr[]){实现............

2021-12-25 21:22:14 547

原创 六大单例模式

单例模式,只能出现一个该类的实例对象。所以需要把构造方法访问类型改成private私有的。饿汉式通过static生产唯一的一个类变量成员public class Main { private static Main instance=new Main(); private Main(){} public static Main getInstance(){return instance;}}老板是个极其小气的人,走过来说,我都还没用这个类,你类加载就直接把instatn

2021-12-25 20:16:23 264

原创 原型模式(克隆模式)

对象A指向的是它的内存地址,当我们把对象A赋值给对象B,他俩还是指向的同一处地址,修改A的话,B也跟着变了。(基本数据类型则是直接赋值,String类型虽然是引用类型,但它被final修饰不可改变的,所以你修改它时其实修改的是string的另一个新的指向引用,所以String自带深克隆)对象的重默认clone()方法会调用super.clone(),其实是浅拷贝。School学校类,给User充当引用类型变量public class School { private String name;

2021-12-25 17:51:10 161

原创 建造者模式

当一个类的成员熟悉过于复杂,庞大时,考虑用建造者模式来设计类。如果你在源码中看到一堆方法通过“·”连接,最后调用build()方法,那他就是在用建造者模式构建一个对象了。直接上源码。Mybatis解析配置文件之解析mapper.xml文件,将它解析成一个MapperStatement对象供后续使用看一下这个MapperStatement类public final class MappedStatement { private String resource; private Configur

2021-12-25 16:42:51 292

原创 抽象工厂模式

工厂方法模式是生产一类产品,如果要再生成另一类产品PC,应该怎么表示呢?其实只要在工厂方法上修改就行了工厂方法模式抽象工厂模式从类图中可以看出,他俩并没有什么区别,就是在工厂里多了一类产品的映射罢了,完全可以把他俩看成是同一个模式,没必要分这么清楚,知道核心就可以了。总结当我们设计用于生产产品的类时,考虑抽象工厂模式,对应的工厂生产对应的产品,这样有利于工厂的扩展,产品的扩展。切记不要陷入我举例子的代码或文字里了。搞懂核心理念就可以了。...

2021-12-25 15:37:37 132

原创 工厂方法模式

很明显简单工厂模式违法了开闭原则,当我要新增一个产品只能修改老代码里面的if语句了。和简单工厂模式相比,工厂方法模式其实就是将那个代工厂的一堆if判断去掉了,生产具体产品的任务给了各自的工厂,不是由代工厂的if,else判断来生产了,现在我们的目的变成了修改一堆if的代工厂,引入工厂模式AbstractFactory类:生产不同产品的工厂的抽象类public interface AbstractFactory { Phone makePhone();}XiaoMiFactory类:生产

2021-12-25 15:13:06 144

原创 简单工厂模式

还是那句话,千万千万不要陷入设计模式 这四个字眼里去了,比如这个简单工厂模式,前人只不过是给它取了一个高大上的名字而已,任何人都写过简单工厂模式。class Factory{ public Product getProduct(String name){ if(name.equals("apple")) return Apple(); else if(name.equals("banana")) return Bana

2021-12-24 21:05:44 172

原创 设计模式设计原则

了解设计模式设计原则

2021-12-24 20:56:27 169

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除