自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

日有寸进

世上只有一种英雄主义,就是在认清生活真相之后依然热爱生活。

  • 博客(22)
  • 资源 (1)

原创 Spring5 源码阅读笔记 (1.4)知识点汇总:解决循环依赖

什么是循环依赖?如下两段代码所示,Spring 在将 CircularRefA 实例化的时候需要注入 CircularRefB,因此会先实例化 CircularRefB。但实例化 CircularRefB 的时候又会发现需要先实例化 CircularRefA。实例化 CircularRefA 又得先实例化 CircularRefB …@Componentpublic class Circul...

2020-02-23 20:47:17 93

原创 Spring5 源码阅读笔记(3.1)getAdvicesAndAdvisorsForBean 为Bean拿到增强与切面

主要流程1 找到所有的候选切面 findCandidateAdvisors 1.1 获取所有的 BeanDefinition 的名称,进而获取所有的 Class 对象 1.2 将 Class 里有 @Aspect 注解信息的收集起来 1.3 根据有 @Aspect 注解信息的类获取切面 getAdvisors 1.3.1 找到所有没有 @PointCut 注解的方法 getAdviso...

2020-02-29 11:37:26 229

原创 Spring5 源码阅读笔记(3)AOP 入口:AbstractAutoProxyCreator

开启AOP最新方式基于注解,不用xml@Component/** 开启注解AOP* 替代了:<aop:aspectj-autoproxy/>* */@EnableAspectJAutoProxy(proxyTargetClass = false,exposeProxy = true)public class EnableAspectJAutoProxyBean {}...

2020-02-28 19:28:15 128

原创 Spring5 源码阅读笔记(2)AnnotationConfigApplicationContext 与 ConfigurationClassPostProcessor

在 Spring5 源码阅读笔记(1)refresh() 刷新 里,我们以 ClassPathXmlApplicationContext 的构造方法为入口找到了 refresh() 方法。其实通过本小节的构造方法也可以://构造1public AnnotationConfigApplicationContext() { //解析器,解析BeanDefinition this.reader...

2020-02-27 18:19:08 74

原创 Spring5 源码阅读笔记(1.4.2.6)registerDisposableBeanIfNecessary(beanName, bean, mbd) 注册DisposableBean如有必要

本小节的作用可以说和 Spring5 源码阅读笔记(1.4.2.5)initializeBean(beanName, exposedObject, mbd) 是有关联的,那一节我们看到了三种初始化方法,这一节可以看到三种销毁方法。public class DestroyMethodBean implements DisposableBean { //jdk的注解 @PreDestr...

2020-02-27 10:16:37 266

原创 Spring5 源码阅读笔记(1.4.4)多例的实例化

在此之前的文章都讲的是单例的实例化。本节讲的是多例的实例化。什么是多例?多例就是每次 getBean 操作得到的不是同一个对象。以下是 doGetBean 方法中的一段:else if (mbd.isPrototype()) { // It's a prototype -> create a new instance. Object prototypeInstance =...

2020-02-25 12:00:11 72

原创 Spring5 源码阅读笔记(1.4.3)getObjectForBeanInstance(sharedInstance, name, beanName, mbd) 获取Bean实例的对象

回顾if (mbd.isSingleton()) { sharedInstance = getSingleton(beanName, () -> { try { return createBean(beanName, mbd, args); } catch (BeansException ex) { // Explicitly remove instance fr...

2020-02-24 16:22:48 75

原创 Spring5 源码阅读笔记(1.4)finishBeanFactoryInitialization(beanFactory) 完成Bean工厂初始化

源码里对这个方法的解释是:实例化所有剩下的(非懒加载的)单例 bean。为什么是剩下的?回忆一下前面的内容:invokeBeanFactoryPostProcessors(beanFactory) 里实例化了所有实现了BeanFactoryPostProcessor接口的Bean。registerBeanPostProcessors(beanFactory) 里实例化了所有实现了BeanPo...

2020-02-23 21:22:41 237

原创 Spring5 源码阅读笔记(1.4.2)createBean(beanName, mbd, args) 创建Bean

下面是 doGetBean 方法中的一段,在1.4节中讲到过:if (mbd.isSingleton()) { sharedInstance = getSingleton(beanName, () -> { try { return createBean(beanName, mbd, args); } catch (BeansException ex) { // ...

2020-02-23 21:18:09 114

原创 Spring5 源码阅读笔记(1.4.2.5)initializeBean(beanName, exposedObject, mbd)

先看一段代码,猜猜启动 Spring 后会打印什么:public class InitMethodBean implements InitializingBean{ @PostConstruct public void postConstruct() { System.out.println("======构造方法之后======="); } ...

2020-02-23 21:17:30 144

原创 Spring5 源码阅读笔记(1.4.2.3)addSingletonFactory(beanName, ()->getEarlyBeanReference(beanName, mbd, bean))

这个方法的入参里有一个匿名类的返回值。我们先看这个方法的代码:类 DefaultSingletonBeanRegistryprotected void addSingletonFactory(String beanName, ObjectFactory<?> singletonFactory) {Assert.notNull(singletonFactory, "Singlet...

2020-02-23 01:02:28 651 2

原创 Spring5 源码阅读笔记(1.4.2.4)populateBean(beanName, mbd, instanceWrapper) 填充Bean

回顾1.4.2 createBean(beanName, mbd, args)我们讲获取 Bean 实例的过程1.4.2.1 createBeanInstance(beanName, mbd, args)通过构造函数创建 Bean 实例。构造函数上如果有 @Autowired,会先将引用类型的入参对象优先实例化。但此时的 Bean 实例里的属性上、非构造方法上如果有 @Autowire...

2020-02-21 17:56:43 254

原创 Spring5 源码阅读笔记(1.4.2.2)applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName)

这是 doCreateBean 的第二个很重要的方法。第一个方法 createBeanInstance 通过构造函数创建了实例。如果构造函数上有 @Autowired,对入参先进行实例化。但如果类里还有其它属性上有 @Autowired,则还需要进行依赖注入。跟源码:类 AbstractAutowireCapableBeanFactoryprotected void applyMerg...

2020-02-21 09:49:00 240

原创 Spring5 源码阅读笔记(1.4.2.1)createBeanInstance(beanName, mbd, args) 创建Bean实例

这个方法是 createBean(beanName, mbd, args) 里的第一个重要的方法,创建Bean实例。一个Bean要实例化是通过它的构造函数,而Bean的构造函数上可能有@Autowired注解。一个构造方法上有@Autowired,是想对引用类型的参数进行注入,这些参数会优先实例化。跟源码:类 AbstractAutowireCapableBeanFactoryprote...

2020-02-20 13:18:01 74

原创 Spring5 源码阅读笔记(1.4.1)getSingleton(beanName) 从缓存里拿单例实例

在 doGetBean 方法里我们先尝试从缓存里拿实例:Object sharedInstance = getSingleton(beanName);跟源码:类 DefaultSingletonBeanRegistry跟 getSingleton:@Nullableprotected Object getSingleton(String beanName, boolean allo...

2020-02-19 21:16:00 87

原创 Spring5 源码阅读笔记(1.3)registerBeanPostProcessors(beanFactory) 注册Bean后置处理器

上一节 Spring5 源码阅读笔记(1.2) invokeBeanFactoryPostProcessors(beanFactory) 调用Bean工厂后置处理器 介绍了BeanFactoryPostProcessor,这一节介绍BeanPostProcessor。如果上一节理解清楚了,那么这一节就很容易理解了。因此,本小节篇幅较短。首先回顾一下 registerBeanPostProces...

2020-02-18 21:41:09 75

原创 Spring5 源码阅读笔记(1.2) invokeBeanFactoryPostProcessors(beanFactory) 调用Bean工厂后置处理器

在 refresh() 方法里,invokeBeanFactoryPostProcessors(beanFactory) 是第二个非常重要的方法。从它的字面意思上看,它的作用是:调用 Bean 工厂的一些后置处理器。什么是 Bean 工厂后置处理器呢?顾名思义,在创建了 Bean 工厂后,可以对 Bean 工厂进行处理。接下来跟源码:类 AbstractApplicationContex...

2020-02-18 11:46:11 89

原创 Spring5 源码阅读笔记(1.1.2)delegate.parseCustomElement(ele) 自定义标签的解析和注册

前面的文章 Spring5 源码阅读笔记(1.1)obtainFreshBeanFactory() 末尾介绍到了默认标签解析和自定义标签解析。protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) { if (delegate.isDefaultNamespace(roo...

2020-02-17 18:26:22 103

原创 Spring5 源码阅读笔记(1.1.1)parseDefaultElement(ele, delegate) 默认标签的解析和注册

本节会揭晓:默认标签解析流程根据前面的文章,我们知道了:在创建 Bean 工厂的过程里就会进行标签解析了。而标签解析分为两种:默认标签解析、自定义标签解析我们先看默认标签解析:类:DefaultBeanDefinitionDocumentReader重点看最重要的 bean 标签解析,跟 processBeanDefinition:里面有 2 步十分重要:解析 docume...

2020-02-17 12:12:39 91

原创 BeanDefinition 属性一览

(1)id:bean的唯一标识名。它必须是合法的XMLID,在整个XML文档中唯一。(2)name:用来为id创建一个或多个别名。它可以是任意的字母符合。多个别名之间用逗号或空格分开。(3)class:用来定义类的全限定名(包名+类名)。只有子类Bean不用定义该属性。(4)parent:子类Bean定义它所引用它的父类Bean。这时前面的class属性失效。子类Bean会继承父类Bean...

2020-02-17 11:26:05 270

原创 Spring5 源码阅读笔记(1)refresh() 刷新

入口private ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");有了 applicationContet 之后,就可进行 getBean(beanName) 操作。与 ClassPathXmlApplicationContext 平行的还有:FileSy...

2020-02-16 20:59:36 202

原创 Spring5 源码阅读笔记(1.1)obtainFreshBeanFactory() 获取新的 Bean 工厂

本节会揭晓:获得 Bean 工厂的大致步骤根据前面的文章,回顾一下 obtainFreshBeanFactory() 的来源:跟 ClassPathXmlApplicationContext 构造函数里的 refresh() 方法,refresh() 方法实现在其父类 AbstractApplicationContext 里,其中有一行:ConfigurableListableBean...

2020-02-16 20:59:23 168

mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz

Linux 使用的版本是centos 7,为方便起见,先把防火墙关闭,配置好网络,在安装部分,会分成两部分讲,首先讲单实例安装,也就是一台服务器上就装一个mysql,接下来就多实例安装,在一个服务器上安装2个甚至多个mysql.

2019-09-17

空空如也

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