自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于Spring Boot中的getResources

关于Spring Boot中的getResources在前一篇讲Spring Boot启动流程的文章中,在获取Initializers和Listeners的时候都会通过ClassLoader的getResources方法获取相关文件的全限定名。今天着重分析一下ClassLoader.getResources,ClsasLoader.getResource,Class.getResource1...

2019-10-31 00:34:22 3010

原创 SpringBoot启动流程中的Initializer和Listeners

在上文分析SpringBoot的启动流程的这篇文章中,我们知道了SpringBoot启动大致需要分为两个阶段,第一个阶段就是实例化一个SpringApplication对象,第二个阶段就是调用这个对象的run()方法。在SpringApplication的构造方法中,分别设置了Listeners和Initializers,我们今天的任务就是看看它俩是干啥的。Initializers1.定义...

2019-10-24 23:17:02 1395 1

原创 SpringBoot启动流程分析

开始@SpringBootApplicationpublic class BootApplication { public static void main(String[] args) { SpringApplication.run(BootApplication.class, args); }}这段代码相信大家一定不陌生了,接下来我们就以这段代码作为开端,来一步步的分析Spr...

2019-10-23 23:02:13 324

原创 @SpringBootApplication注解

Spring Boot入口类当我们创建完成一个Spring Boot项目之后,会默认生成一个*Application的入口类,我们可以通过这个类中的main方法快速的启动一个Spring Boot项目。@SpringBootApplicationpublic class MyTestApplication { public static void main(String[] args) {...

2019-10-18 00:00:08 520

原创 Docker 容器

Docker容器容器是Docker的一个核心概念,容器可以说是一个或者一组独立运行的应用,以及它运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统和跑在上面的运行应用。启动容器通过镜像新建一个容器并启动docker run [OPTIONS] IMAGE [COMMAND] [ARG…]options:03. -d, --detach=false 指...

2019-09-25 14:37:32 123

原创 Docker image镜像

Docker镜像Docker容器运行的时候必须在本地存在对应的Docker镜像,如果Docker本地没有的话,就会从Docker的镜像仓库中获取。获取镜像通常我们如果想从Docker仓库中获取仓库,通常使用docker pull命令,命令格式是:docker pull [选项] [Docker Registry仓库] <仓库名>:<标签>Docker Reg...

2019-09-23 20:56:56 215

原创 初识Docker

什么是Docker?Docker是一种操作系统层面的虚拟化技术。Docker通过对容器的进一步封装,从文件系统,网络互联到进程隔离等等,极大的简化了容器的创建和维护。这里的容器指的是通过namespace,cgroup,overlay file system技术隔离出来的进程。Docker相比于传统的虚拟机技术有什么优势?传统虚拟机采用的技术是虚拟出一套硬件后,在虚拟出来的硬件上运行一个...

2019-09-17 20:10:13 179

原创 Spring技术内幕笔记(十四)------AOP概述

AOP概念回顾AOP是Aspect-Oriented Programming(面向方面编程或面向切面)的简称。面向切面编程为我们提供了有别于面向对象的角度,来思考程序结构,通过这种方式来弥补面向对象的不足。面向对象强调的是一切皆对象。同样我们也可以说面向接口,一切皆接口。面向服务一切皆服务。同理面向切面。我们拿面向接口举例,强调的就是我们在开发中操纵的都是一些接口,而不去关心其具体实现。...

2019-07-19 00:01:21 133

原创 Spring技术内幕笔记(十三)----autowiring(自动依赖装配)的实现

autowiring在Spring中,我们如果想进行Bean的关系依赖,要么使用显式的BeanDefinition属性值,来对Bean进行依赖,要么使用自动装配的方式来进行依赖,这样的方式为容器提供了很大的遍历,使我们不需要显式的对Bean属性进行依赖关系声明,只要配置好autowiring属性,IOC容器就会根据这个属性的配置,使用反射自动查找属性的类型或名字。在populateBean这个...

2019-07-15 23:57:47 288

原创 Spring技术内幕笔记(十二)------BeanPostProcessor的实现

什么是BeanPostProcessorBeanPostProcessor是使用Ioc容器的时经常会遇到的一个特性,这个Bean的后置处理器是一个监听器。将后置处理器向Ioc容器中注册之后,容器中管理的Bean具备了接收Ioc容器事件回调的能力。BeanPostProcessor是一个接口类,它具有两个接口方法,一个是PostProcessorBeforeInitialization,在Bea...

2019-07-15 23:25:40 176

原创 Spring技术内幕笔记(十一)------FactoryBean的实现

FactoryBean一般情况下,Spring通过反射机制利用bean的Class属性指定实现类来实例化bean。而FactoryBean是一种特殊的bean,是一个工厂bean,可以自己创建bean实例,如果一个类实现了Factorybean接口,则该类可以自己定义创建实例对象的方法,只需要实现getObject方法就好为了区分FactoryBean和FactoryBean创建的bean实例...

2019-07-09 00:45:35 197

原创 Spring技术内幕笔记(十)------lazy-init属性和预实例化

lazy-init属性和预实例化在IOC容器的初始化过程中,主要就是对BeanDefinition的定义,载入,解析和注册。而我们所说的依赖注入是发生在应用第一次向容器所要bean的时候,也就是调用 getBean的时候。spring在启动的过程中主要发生两个过程初始化容器对bean进行初始化并依赖注入(对no-lazy-init属性的bean)我们所有说lazy-init就是懒加载...

2019-07-01 00:43:48 565

原创 Spring技术内幕笔记(九)------ApplicationContext和Bean的初始化及销毁

ApplicationContext的初始化及销毁在Spring中,我们将BeanFactory和ApplicationContext称作它的IOC容器,既然是容器那么他就会存在初始化和销毁的过程,接下来我们就来了解一下容器的初始化和销毁过程。容器的初始化过程发生在AbstractApplicationContext#prepareBeanFactory中/** * Configure ...

2019-06-27 00:07:26 505

原创 Spring技术内幕笔记(八)------对Bean Reference的解析

在上篇文章中我们了解到了如何设置Bean之间的依赖关系,以及如何将一个Bean设置到它所依赖的另一个bean的属性中,但是我们还忘了一步,就是对BeanDefinition进行解析,在Spring中是通过BeanDefinitionResolver来对BeanDefinition进行解析的。在populateBean()会创建一个BeanDefinitionValueResolver对象,然后调...

2019-06-25 23:44:48 1086

原创 Spring技术内幕笔记(七)------Bean依赖关系设置#populateBean()

Spring是如何设置实例化对象的依赖关系的在上一篇中,我们已经了解了实例化bean对象的整个过程。在实例化bean对象生成的基础上,我们再来分析一下Spring是如何对这些对象进行处理的,也就是如何设置这些bean对象的依赖关系。在doCreateBean()中当我们实例化Bean对象完成之后,就可以初始化这个Bean对象了,也就是我们所说的设置Bean的依赖关系,populateBean(...

2019-06-25 00:16:19 721

原创 Spring技术内幕笔记(六)------IoC容器依赖注入#doGetBean()

IoC容器依赖注入在上一篇中我们了解了getBean()的大致过程,并对其进行了总结,getBean()就是依赖注入的入口方法,在这个方法里面触发了依赖注入,而依赖注入的前提就是容器中的BeanDefinition数据已经建立好的前提下进行的。getBean()是依赖注入的起点,之后会调用createBean。在createBean中,Bean对象会依据BeanDefinition定义的要求生...

2019-06-04 00:39:57 453

原创 Spring技术内幕笔记(五)------IoC容器依赖注入#doGetBean()

IoC容器依赖注入在前几篇笔记中,我们已经了解到如何对IoC容器进行初始化,初始化的过程主要是在IoC容器中建立BeanDefinition的相关映射,接下来我们就开始研究,如何利用这些BeanDefinition使IoC容器可以对Bean的依赖关系进行注入的。getBean()在通常情况下,依赖注入发生的过程是用户第一次向IoC容器索要Bean时触发的,当然如果在BeanDefinitio...

2019-05-31 01:01:49 189

原创 Spring技术内幕笔记(四)------IoC容器初始化过程#BeanDefinition在容器中的注册

Ioc容器的初始化过程在上一篇中,我们已经分析过BeanDefinition在Ioc容器中的载入和解析过程,在经过以上步骤之后,用户所定义的BeanDefinition信息已经在IoC容器中建立起来自己的数据结构以及相应的数据表示,但是这些数据还是不能供IoC容器直接使用,我们需要将这些数据注册到IoC容器中。在DefaultListableBeanFactory中是通过一个Concurrent...

2019-05-30 00:20:13 163

原创 Spring技术内幕笔记(三)------IoC容器初始化过程#BeanDefinition的载入和解析

IoC容器的初始化过程在上一篇中我们讨论了对代表BeanDefinition的Resource定位的分析后,接下来就需要了解整个BeanDefinition信息的载入过程。在AbstractApplicationContext#refresh()方法中,有这样一段代码ConfiguableListableBeanFactory beanFactory = obtainFreshBeanFac...

2019-05-29 01:18:32 177

原创 Spring技术内幕笔记(二)------IoC容器初始化过程#BeanDefinition的资源定位

IoC容器的初始化过程在上一篇中提到,在ApplicationContext的构造方法中有一个refresh()方法,这个方法标志着IoC容器的正式启动。IoC容器的初始化主要包括以下三个基本过程Resource定位过程BeanDefinition的载入向IoC容器注册这些BeanDefinition的过程Spring将这三个过程分开同时使用不同的模块来完成,通过这样的设计可以让用户...

2019-05-24 01:06:32 150

原创 Spring技术内幕笔记(一)------BeanFactory和ApplicationContext

BeanFactory的应用场景BeanFactory接口定义了IoC容器最基本的形式,并且提供了IoC容器应该遵守的最基本的服务起源,同时也是我们使用IoC容器BeanFactory为我们提供了以下操作通过接口方法containsBean让用户能够判断容器是否含有指定名字的Bean通过接口方法isSingleton来查询指定名字的Bean是否是Singleton类型的Bean。对于S...

2019-05-23 00:19:01 190

原创 关于Spring IOC的一点理解

1、什么是IOC(控制反转)?在说IOC之前我们首先要搞清这么几个概念,依赖倒置和依赖注入,控制反转(IOC)和依赖注入(DI)它们之间有什么联系和区别依赖倒置原则a、高层模块不应该依赖低层模块,二者都应该依赖于抽象b、抽象不应该依赖于细节,细节应该依赖于抽象由此可见依赖倒置的本质是依赖抽象,而依赖注入的本质是依赖容器接下来我们再说控制反转和依赖注入本质上来讲控制反转和...

2019-03-22 01:37:22 153

原创 设计模式之六大设计原则(二)

里式替换原则里式替换原则有2008年图灵奖得主美国第一位计算机科学女博士Barbara liskov教授和卡内基 梅隆大学jeannette Wing教授与1994年提出。其严格表述如下:如果对于每一个类型为S的对象o1,都有类型为T的对象o2,使得定义的所有程序P在所有对象o1代换o2时,程序p的行为没有发生变化,那么类型S就是类型T的子类型。通俗的解释就是里式替换原则:所有引用父类的地...

2019-01-16 01:19:05 152

原创 设计模式之六大设计原则(一)

单一职责原则单一职责原则是我们设计模式中最简单也是最容易理解的面向对象设计原则,我们先来看一下单一职责原则的定义:单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。通俗来讲就是一个类它只负责单一的功能,切不可做的太多。在软件中一个类(大到一个模块,小到一个方法)如果所具有的功能越多,那么它就越复杂,复用性就越低,而且各个功能模块之间的耦合度也会随之上升。这样长此以往下去会对我们...

2019-01-15 01:47:19 144

空空如也

空空如也

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

TA关注的人

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