<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xuJingZhou的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xuJingZhou</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xuJingZhou]]></copyright><item><title><![CDATA[关于Spring Boot中的getResources]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/102829928</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/102829928</guid><author>xuJingZhou</author><pubDate>Thu, 31 Oct 2019 00:34:22 +0800</pubDate><description><![CDATA[关于Spring Boot中的getResources
在前一篇讲Spring Boot启动流程的文章中，在获取Initializers和Listeners的时候都会通过ClassLoader的getResources方法获取相关文件的全限定名。
今天着重分析一下ClassLoader.getResources,ClsasLoader.getResource,Class.getResource
1...]]></description><category></category></item><item><title><![CDATA[SpringBoot启动流程中的Initializer和Listeners]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/102734482</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/102734482</guid><author>xuJingZhou</author><pubDate>Thu, 24 Oct 2019 23:17:02 +0800</pubDate><description><![CDATA[在上文分析SpringBoot的启动流程的这篇文章中，我们知道了SpringBoot启动大致需要分为两个阶段，第一个阶段就是实例化一个SpringApplication对象，第二个阶段就是调用这个对象的run()方法。
在SpringApplication的构造方法中，分别设置了Listeners和Initializers，我们今天的任务就是看看它俩是干啥的。
Initializers
1.定义
...]]></description><category></category></item><item><title><![CDATA[SpringBoot启动流程分析]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/102712990</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/102712990</guid><author>xuJingZhou</author><pubDate>Wed, 23 Oct 2019 23:02:13 +0800</pubDate><description><![CDATA[开始
@SpringBootApplication
public class BootApplication {
	public static void main(String[] args) {
		SpringApplication.run(BootApplication.class, args);
	}
}

这段代码相信大家一定不陌生了，接下来我们就以这段代码作为开端，来一步步的分析Spr...]]></description><category></category></item><item><title><![CDATA[@SpringBootApplication注解]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/102617315</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/102617315</guid><author>xuJingZhou</author><pubDate>Fri, 18 Oct 2019 00:00:08 +0800</pubDate><description><![CDATA[Spring Boot入口类
当我们创建完成一个Spring Boot项目之后，会默认生成一个*Application的入口类，我们可以通过这个类中的main方法快速的启动一个Spring Boot项目。
@SpringBootApplication
public class MyTestApplication {
	public static void main(String[] args) {...]]></description><category></category></item><item><title><![CDATA[Docker 容器]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/101364600</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/101364600</guid><author>xuJingZhou</author><pubDate>Wed, 25 Sep 2019 14:37:32 +0800</pubDate><description><![CDATA[Docker容器
容器是Docker的一个核心概念，容器可以说是一个或者一组独立运行的应用，以及它运行态环境。对应的，虚拟机可以理解为模拟运行的一整套操作系统和跑在上面的运行应用。
启动容器

通过镜像新建一个容器并启动


docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

options:
03.  -d, --detach=false         指...]]></description><category></category></item><item><title><![CDATA[Docker image镜像]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/101225192</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/101225192</guid><author>xuJingZhou</author><pubDate>Mon, 23 Sep 2019 20:56:56 +0800</pubDate><description><![CDATA[Docker镜像
Docker容器运行的时候必须在本地存在对应的Docker镜像，如果Docker本地没有的话，就会从Docker的镜像仓库中获取。
获取镜像
通常我们如果想从Docker仓库中获取仓库，通常使用docker pull命令，命令格式是：

docker pull [选项] [Docker Registry仓库] &lt;仓库名&gt;:&lt;标签&gt;


Docker Reg...]]></description><category></category></item><item><title><![CDATA[初识Docker]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/100938034</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/100938034</guid><author>xuJingZhou</author><pubDate>Tue, 17 Sep 2019 20:10:13 +0800</pubDate><description><![CDATA[什么是Docker？
Docker是一种操作系统层面的虚拟化技术。
Docker通过对容器的进一步封装，从文件系统，网络互联到进程隔离等等，极大的简化了容器的创建和维护。
这里的容器指的是通过namespace，cgroup，overlay file system技术隔离出来的进程。
Docker相比于传统的虚拟机技术有什么优势？
传统虚拟机采用的技术是虚拟出一套硬件后，在虚拟出来的硬件上运行一个...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（十四）------AOP概述]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/96395542</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/96395542</guid><author>xuJingZhou</author><pubDate>Fri, 19 Jul 2019 00:01:21 +0800</pubDate><description><![CDATA[AOP概念回顾
AOP是Aspect-Oriented Programming（面向方面编程或面向切面）的简称。

面向切面编程为我们提供了有别于面向对象的角度，来思考程序结构，通过这种方式来弥补面向对象的不足。
面向对象强调的是一切皆对象。同样我们也可以说面向接口，一切皆接口。面向服务一切皆服务。同理面向切面。
我们拿面向接口举例，强调的就是我们在开发中操纵的都是一些接口，而不去关心其具体实现。...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（十三）----autowiring（自动依赖装配）的实现]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/96044027</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/96044027</guid><author>xuJingZhou</author><pubDate>Mon, 15 Jul 2019 23:57:47 +0800</pubDate><description><![CDATA[autowiring
在Spring中，我们如果想进行Bean的关系依赖，要么使用显式的BeanDefinition属性值，来对Bean进行依赖，要么使用自动装配的方式来进行依赖，这样的方式为容器提供了很大的遍历，使我们不需要显式的对Bean属性进行依赖关系声明，只要配置好autowiring属性，IOC容器就会根据这个属性的配置，使用反射自动查找属性的类型或名字。
在populateBean这个...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（十二）------BeanPostProcessor的实现]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/96039680</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/96039680</guid><author>xuJingZhou</author><pubDate>Mon, 15 Jul 2019 23:25:40 +0800</pubDate><description><![CDATA[什么是BeanPostProcessor
BeanPostProcessor是使用Ioc容器的时经常会遇到的一个特性，这个Bean的后置处理器是一个监听器。将后置处理器向Ioc容器中注册之后，容器中管理的Bean具备了接收Ioc容器事件回调的能力。
BeanPostProcessor是一个接口类，它具有两个接口方法，一个是PostProcessorBeforeInitialization，在Bea...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（十一）------FactoryBean的实现]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/94674137</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/94674137</guid><author>xuJingZhou</author><pubDate>Tue, 09 Jul 2019 00:45:35 +0800</pubDate><description><![CDATA[FactoryBean
一般情况下，Spring通过反射机制利用bean的Class属性指定实现类来实例化bean。而FactoryBean是一种特殊的bean，是一个工厂bean，可以自己创建bean实例，如果一个类实现了Factorybean接口，则该类可以自己定义创建实例对象的方法，只需要实现getObject方法就好
为了区分FactoryBean和FactoryBean创建的bean实例...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（十）------lazy-init属性和预实例化]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/94365108</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/94365108</guid><author>xuJingZhou</author><pubDate>Mon, 01 Jul 2019 00:43:48 +0800</pubDate><description><![CDATA[lazy-init属性和预实例化
在IOC容器的初始化过程中，主要就是对BeanDefinition的定义，载入，解析和注册。而我们所说的依赖注入是发生在应用第一次向容器所要bean的时候，也就是调用 getBean的时候。
spring在启动的过程中主要发生两个过程

初始化容器
对bean进行初始化并依赖注入（对no-lazy-init属性的bean）

我们所有说lazy-init就是懒加载...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（九）------ApplicationContext和Bean的初始化及销毁]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/93799492</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/93799492</guid><author>xuJingZhou</author><pubDate>Thu, 27 Jun 2019 00:07:26 +0800</pubDate><description><![CDATA[ApplicationContext的初始化及销毁
在Spring中，我们将BeanFactory和ApplicationContext称作它的IOC容器，既然是容器那么他就会存在初始化和销毁的过程，接下来我们就来了解一下容器的初始化和销毁过程。
容器的初始化过程发生在AbstractApplicationContext#prepareBeanFactory中
/**
	 * Configure ...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（八）------对Bean Reference的解析]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/93672710</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/93672710</guid><author>xuJingZhou</author><pubDate>Tue, 25 Jun 2019 23:44:48 +0800</pubDate><description><![CDATA[在上篇文章中我们了解到了如何设置Bean之间的依赖关系，以及如何将一个Bean设置到它所依赖的另一个bean的属性中，但是我们还忘了一步，就是对BeanDefinition进行解析，在Spring中是通过BeanDefinitionResolver来对BeanDefinition进行解析的。
在populateBean()会创建一个BeanDefinitionValueResolver对象，然后调...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（七）------Bean依赖关系设置#populateBean（）]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/93546331</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/93546331</guid><author>xuJingZhou</author><pubDate>Tue, 25 Jun 2019 00:16:19 +0800</pubDate><description><![CDATA[Spring是如何设置实例化对象的依赖关系的
在上一篇中，我们已经了解了实例化bean对象的整个过程。在实例化bean对象生成的基础上，我们再来分析一下Spring是如何对这些对象进行处理的，也就是如何设置这些bean对象的依赖关系。
在doCreateBean()中当我们实例化Bean对象完成之后，就可以初始化这个Bean对象了，也就是我们所说的设置Bean的依赖关系，populateBean(...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（六）------IoC容器依赖注入#doGetBean（）]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/90761629</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/90761629</guid><author>xuJingZhou</author><pubDate>Tue, 04 Jun 2019 00:39:57 +0800</pubDate><description><![CDATA[IoC容器依赖注入
在上一篇中我们了解了getBean()的大致过程，并对其进行了总结，getBean()就是依赖注入的入口方法，在这个方法里面触发了依赖注入，而依赖注入的前提就是容器中的BeanDefinition数据已经建立好的前提下进行的。
getBean()是依赖注入的起点，之后会调用createBean。在createBean中，Bean对象会依据BeanDefinition定义的要求生...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（五）------IoC容器依赖注入#doGetBean（）]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/90709204</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/90709204</guid><author>xuJingZhou</author><pubDate>Fri, 31 May 2019 01:01:49 +0800</pubDate><description><![CDATA[IoC容器依赖注入
在前几篇笔记中，我们已经了解到如何对IoC容器进行初始化，初始化的过程主要是在IoC容器中建立BeanDefinition的相关映射，接下来我们就开始研究，如何利用这些BeanDefinition使IoC容器可以对Bean的依赖关系进行注入的。
getBean()
在通常情况下，依赖注入发生的过程是用户第一次向IoC容器索要Bean时触发的，当然如果在BeanDefinitio...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（四）------IoC容器初始化过程#BeanDefinition在容器中的注册]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/90681527</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/90681527</guid><author>xuJingZhou</author><pubDate>Thu, 30 May 2019 00:20:13 +0800</pubDate><description><![CDATA[Ioc容器的初始化过程
在上一篇中，我们已经分析过BeanDefinition在Ioc容器中的载入和解析过程，在经过以上步骤之后，用户所定义的BeanDefinition信息已经在IoC容器中建立起来自己的数据结构以及相应的数据表示，但是这些数据还是不能供IoC容器直接使用，我们需要将这些数据注册到IoC容器中。在DefaultListableBeanFactory中是通过一个Concurrent...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（三）------IoC容器初始化过程#BeanDefinition的载入和解析]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/90653750</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/90653750</guid><author>xuJingZhou</author><pubDate>Wed, 29 May 2019 01:18:32 +0800</pubDate><description><![CDATA[IoC容器的初始化过程
在上一篇中我们讨论了对代表BeanDefinition的Resource定位的分析后，接下来就需要了解整个BeanDefinition信息的载入过程。
在AbstractApplicationContext#refresh（）方法中，有这样一段代码
ConfiguableListableBeanFactory beanFactory = obtainFreshBeanFac...]]></description><category></category></item><item><title><![CDATA[Spring技术内幕笔记（二）------IoC容器初始化过程#BeanDefinition的资源定位]]></title><link>https://blog.youkuaiyun.com/xuJingZhou/article/details/90496556</link><guid>https://blog.youkuaiyun.com/xuJingZhou/article/details/90496556</guid><author>xuJingZhou</author><pubDate>Fri, 24 May 2019 01:06:32 +0800</pubDate><description><![CDATA[IoC容器的初始化过程
在上一篇中提到，在ApplicationContext的构造方法中有一个refresh（）方法，这个方法标志着IoC容器的正式启动。IoC容器的初始化主要包括以下三个基本过程

Resource定位过程
BeanDefinition的载入
向IoC容器注册这些BeanDefinition的过程

Spring将这三个过程分开同时使用不同的模块来完成，通过这样的设计可以让用户...]]></description><category></category></item></channel></rss>