- 博客(44)
- 收藏
- 关注
原创 Spring boot启动过程详解
本篇主要介绍spring boot在启动过程中都做了哪些工作,重点介绍在spring容器ApplicationContext刷新前都做了哪些准备,本篇以源码解释为主,示例为辅进行梳理其过程。Spring boot整个启动过程分为3部分,分别是1.准备环境配置,2. 准备Spring容器并刷新容器,3. 容器刷新后处理。每个部分又有如下图所示的步骤,本篇详细讲解这些步骤。
2024-09-05 22:05:15 2192 7
原创 Spring boot接口扩展之SPI方式详解
Spring提供了强大的扩展体系,其中本篇介绍的SPI方式——即在META-INF目录下指定文件注册扩展实现的方式是其中主要的扩展方式之一,该种方式广泛应用在spring boot中用于自动加载的扩展实现。本篇先介绍spring在META-INF目录下约定了哪些可配置的文件,然后介绍了spring boot用于加载`spring.factories`和`aot.factories`文件的`SpringFactoriesLoader`类,最后总结了`spring.factories`可配置扩展接口及这些接口的
2024-09-03 20:20:17 1437
原创 Spring及Springboot事件机制详解
Spring提供了强大的扩展体系,其中本篇介绍的事件机制是其扩展体系中一个主要分支。本篇先介绍Spring事件机制原理,再总结下spring和spring boot启动过程的主要事件,接着通过示例展示了自定义监听器的4种主要的注册方式,最后通过示例介绍了自定义事件的发布方式。
2024-09-03 17:06:48 1129
原创 线上问题定位分析宝典——Arthas篇
对于如何使用Arthas官方文档做得非常详细,本篇主要内容概要:对Arthas命令按作用对象进行了分类对于典型故障场景,分享如何使用Arthas查找问题原因并使用Arthas救火。分享如何使用arthas获取Spring context容器并获取项目中的bean。最后分享实例即将OOM时,如何使用Arthas清理无用的全局对象,以避免OOM。
2024-07-01 05:00:00 1213
原创 你的系统稳定吗——如何快速发现和解决生产问题
快速感知问题:异常监控告警不能少,降级措施必须有,告警和反馈消息能及时看到快速找出根因:顺藤摸瓜,罗列所有可能的原因,从疑点最大的开始逐个排查,排查问题皆需要有据可查,切勿想当然排除可疑点。
2024-06-30 11:53:18 1009
原创 你的系统稳定吗——混沌工程从捣乱的视角看系统稳定性
混沌工程是通过实验探究系统稳定性的实践过程,其作战武器是风险因子,即在系统中引入风险变量来验证系统对风险的抵抗能力,它的作用是推动系统容错能力建设、验证监控告警及时性、提升研发问题排查能力。
2024-06-29 16:42:11 864
原创 你的系统稳定吗——监控与警报设计思考
监控系统的4个黄金指标分别是延迟处理请求所需要的时间。需要区分成功请求和失败请求的延迟,计算总体延迟时,如果将失败请求的延迟也计算在内,可能会产生误导性的结果。但是,“慢”错误要比“快”错误更糟!因此,监控错误回复的延迟是很重要的。流量对系统负载进行衡量,比如:请求数、并发数、I/O速率错误显式错误:如http表示的系统内部异常状态500、网络超时问题隐式错误:如http状态200时回复内容中包含的错误信息饱和度即系统资源利用率,比如内存、CPU、IO带宽、磁盘利用率。
2024-06-29 15:35:07 429
原创 Graalvm配置文件与Feature和Substitute机制介绍
Java语言的动态特性阻碍了native-image静态分析和编译,开发者需要提供相应的配置文件native-image才能完整的识别出需要静态编译的代码。Feature机制和替换机制为开发者提供了在编译期间尽可能多的控制通过native-image不仅可以把应用编译为可执行文件,也可以把公共库编译为动态库供其它语言调用,还可以把公共库通过JNI接口暴露给其它java程序使用。
2024-06-29 08:44:21 1083
原创 MinGW和Cygwin的区别
MinGW和Cygwin都是windows平台下用于编译c/c++代码,Cygwin目的为windows平台提供类Unix环境,让运行在类Unix环境中的程序代码可以在windows下编译成功。cygwin提供了抽象层dll,可用于将部分POSIX转换为Windows API调用,目录结构同Linux一样。是一个用于Windows平台的开发工具集,提供了一组GNU工具和库,比如GCC。
2024-06-28 15:11:00 624
原创 Spring4.3.x xml配置文件搜索和解析过程
绪论spring在创建BeanFactory时会把xml配置文件和注解信息转换为一个个BeanDefinition对象,BeanDefinition对象存储的是单个bean的配置信息,比如依赖类、scope、是否延迟加载等等。因此,研究配置文件的解析过程,对学习spring也是重要的一点。 下面我们通过XmlWebApplicationContext来研究Spring配置文件的解析。获取
2024-06-28 14:52:57 1163 1
原创 logback用java代码创建logger
直接贴代码import ch.qos.logback.classic.Level;import ch.qos.logback.classic.Logger;import ch.qos.logback.classic.LoggerContext;import ch.qos.logback.classic.encoder.PatternLayoutEncoder;import ch.qos.logback.core.rolling.RollingFileAppender;import ch...
2020-06-18 13:14:15 911
原创 CentOS6.5安装Docker
(1)安装 Fedora EPEL。如下命令和输出 [root@iZ94v4b1udpZ tomcat]# rpm -ivh http://dl.Fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmRetrieving http://dl.Fedoraproject.org/pub/epel/6/x86_64/epe
2017-03-17 14:07:37 871
原创 java keytool创建证书
概述为了实现消息认证,使用Java自带的 keytool 命令可以生成密钥及证书文件,首先生成密钥及证书信任文件。 Server需要: 1)KeyStore:保存服务端的私钥; 2)Trust KeyStore:保存客户端的授权证书 Client需要: 1)KeyStore:保存客户端的私钥; 2)Trust KeyStore:保存服务端的授权证书证书提供方创建证书只需两步
2017-03-17 14:06:06 596
原创 总结Spring中工厂后处理器
工厂处理器是一种特殊的Bean,这种Bean并不对外提供服务,它甚至可以无需id属性,它主要负责对容器本身进行某些特殊的处理。Spring中有两类工厂后处理器,一个是BeanFactoryPostProcessor,它是所有工厂后处理器的顶层接口;另一个是BeanDefinitionRegistryPostProcessor,它继承自BeanFactoryPostProcessor,设计它的目的是使
2017-02-14 16:46:03 2255
原创 从诸葛亮博望坡火烧曹军谈Spring AOP 的五种使用方式
曹操自剿黄巾,讨董作,擒吕布,灭袁绍后,队伍达到鼎盛期,拥有兵将100余万,为了统一全国,派手下将领夏候淳领兵十万攻打新野。时当秋月,秋风徐起,夏侯惇引兵至博望坡,新野危在旦夕。 刘备请军师诸葛亮对策。诸葛亮给出的计策是引诱曹军到达博望坡南处后实施火攻。命赵云在北部与曹兵对敌,只输不赢,刘备引本部人马兵援赵云诱敌深入,将曹兵引入峡谷。命关羽领兵1000在博望坡之左玉山右边的安林脚下伏兵,不可动,
2017-02-13 21:12:02 1738
原创 Spring AOP总结
Spring AOP的重要对象Spring AOP的参与者。切面(Aspect): 一个关注点的模块化,这个模块会横切多个对象。Spring中使用org.springframework.aop.Advisor作切面。连接点(Joinpoint): 程序执行过程中明确的点,如方法的调用或特定的异常被抛出。Spring中使用org.aspectj.lang.JoinPoint为连接点对象。切点(Poin
2017-02-12 14:31:27 2200
原创 玩转Cglib代理
概述和JDK动态代理的思想一样,Cglib也为方法调用提供了回调。Cglib提供了多个回调接口,它们都继承了一个net.sf.cglib.proxy.Callback的marker接口。Cglib为Callback接口提供了如下7个子接口。 (1)net.sf.cglib.proxy.InvocationHandler 这个接口和JDK提供的java.lang.reflect.Invocati
2017-02-11 15:00:36 688
原创 玩转JDK动态代理
概述JDK动态代理的两个主要类: java.lang.reflect.InvocationHandler:执行代理对象的方法时的回调接口。在这个接口中编写与代理业务相关的代码。它在JDK中的定义如下。public interface InvocationHandler { /** * @param proxy JDK生成的代理对象 * @param method 被代理
2017-02-11 14:48:27 383
原创 Spring4.3.x 容器中bean的创建过程(5)—— 注册bean的销毁方法
概述在Spring4.3.x 容器中bean的创建过程(1)——走进初始化bean的主要战场一篇中我们找到了初始化bean的主要场所在AbstractAutowireCapableBeanFactory类中的doCreateBean方法中,在这个方法中首先调用createBeanInstance方法创建bean的实例;然后调用populateBean方法设置bean的属性;接着调用initializ
2017-02-10 12:11:45 1424
原创 Spring4.3.x 容器中bean的创建过程(4)—— 执行bean的初始化方法
概述在Spring4.3.x 容器中bean的创建过程(1)——走进初始化bean的主要战场一篇中我们找到了初始化bean的主要场所在AbstractAutowireCapableBeanFactory类中的doCreateBean方法中,在这个方法中首先调用createBeanInstance方法创建bean的实例;然后调用populateBean方法设置bean的属性;接着调用initializ
2017-02-10 12:09:33 630
原创 Spring4.3.x 容器中bean的创建过程(3)—— 初始化bean的属性值
概述在Spring4.3.x 容器中bean的创建过程(1)——走进初始化bean的主要战场一篇中我们找到了初始化bean的主要场所在AbstractAutowireCapableBeanFactory类中的doCreateBean方法中,在这个方法中首先调用createBeanInstance方法创建bean的实例;然后调用populateBean方法设置bean的属性;接着调用initializ
2017-02-10 12:07:39 842
原创 Spring4.3.x 容器中bean的创建过程(2)——实例化Bean
概述在Spring4.3.x 容器中bean的创建过程(1)——走进初始化bean的主要战场一篇中我们找到了初始化bean的主要场所在AbstractAutowireCapableBeanFactory类中的doCreateBean方法中,在这个方法中首先调用createBeanInstance方法创建bean的实例;然后调用populateBean方法设置bean的属性;接着调用initializ
2017-02-10 12:04:50 6732 1
原创 Spring4.3.x 容器中bean的创建过程(1)——走进初始化bean的主要战场
概述spring创建bean时需要一个重要的对象,那就是BeanDefinition对象,spring在创建BeanFactory时会把xml配置文件和注解信息转换为一个个BeanDefinition对象,BeanDefinition对象存储的是单个bean的配置信息,比如依赖类、scope、是否延迟加载等等,对于BeanDefinition的创建过程,可以阅读我的Spring4.3.x 浅析xml
2017-02-10 12:02:09 1656
原创 Spring4.3.x 浅析xml配置的解析过程(11)——解析aop命名空间之scoped-proxy标签
概述Spring为生命周期长的bean调用生命周期短的bean提供了三种解决方案。第一种是使用默认命名空间(beans)的<look-up>标签;第二种是使用context命名空间的<context:component-scan>解析@Scope注解;第三种是使用AOP命名空间的<aop:scoped-proxy>标签装饰生命周期短的bean。<aop:scoped-proxy>的使用如下<bean
2017-02-09 12:38:20 1902
原创 Spring4.3.x 浅析xml配置的解析过程(10)——解析aop命名空间之aspectj-autoproxy标签
概述Spring的AOP命名空间提供了<aop:config>、<aop:aspectj-autoproxy>和<aop:scoped-proxy>三大标签。前两个标签的作用是想指定pointcut(切点)提供adivce(增强)处理,而<aop:scoped-proxy>的作用是对生命周期短的bean提供装饰,使生命周期短的bean能被生命周期长的bean正确调用。这一篇不会探讨<aop:scop
2017-02-09 12:35:43 1816
原创 Spring4.3.x 浅析xml配置的解析过程(9)——解析aop命名空间之config标签
概述spring为简化AOP在xml文件中的定义而创建了一个http://www.springframework.org/schema/aop命名空间,这里我简称为aop命名空间。spring在解析xml配置文件内容的过程中遇到非默认命名空间时,会查找系统中所有META-INF目录下的spring.handlers文件中与命名空间对应的处理器,我们可以在spring-aop-x.x.x-RELEAS
2017-02-09 12:34:29 1568
原创 Spring4.3.x 浅析xml配置的解析过程(8)——解析context命名空间之component-scan标签
概述Spring context命名空间有property-placeholder、property-override、annotation-config、component-scan、load-time-weaver、spring-configured、mbean-export和mbean-server 8个标签。property-placeholder和property-override标签的解
2017-02-09 12:25:59 2932 1
原创 Spring4.3.x 浅析xml配置的解析过程(7)——解析context命名空间之annotation-config标签
概述Spring context命名空间有property-placeholder、property-override、annotation-config、component-scan、load-time-weaver、spring-configured、mbean-export和mbean-server 8个标签。上一节探讨了 property-placeholder和property-overr
2017-02-09 12:09:28 1309
原创 Spring4.3.x 浅析xml配置的解析过程(6)——解析context命名空间之property-placeholder和property-override标签
概述在上一篇解析自定义命名空间的标签 中,我们已经知道解析自定义命名空间的标签需要用到NamespaceHandler接口的实现类,并且知道spring是如何获取命名空间对应的命名空间处理器对象的。因此我们很容易就能在spring-context包下的META-INF/spring.handlers文件中找到http://www.springframework.org/schema/context命
2017-02-09 12:00:41 3007
原创 Spring4.3.x 浅析xml配置的解析过程(5)——解析自定义命名空间的标签
概述在上一篇解析<bean>标签及其所有子标签我们详细探讨了如何使用<bean>标签来创建一个BeanDefintion对象。这一篇我们开始探讨一下spring如何处理其它命名空间的xml标签,比如spring扩展的http://www.springframework.org/schema/context、http://www.springframework.org/schema/p和http://
2017-02-09 11:57:42 2883
原创 Spring4.3.x 浅析xml配置的解析过程(4)——解析bean标签及其所有子标签
概述在使用ResourceLoader创建Resource对象一节中,我们探讨了Spring如何正确的查找我们指定的配置文件并为配置文件生成Resource对象。在使用DocumentLoader创建Document对象一节中,我们又已经解析了Spring通过xerces如何把Resource对象中的XML内容转换成Document对象。在浅析Spring4使用XmlBeanDef
2017-02-09 11:35:43 1946
原创 Spring4.3.x 浅析xml配置的解析过程(3)——使用DocumentLoader创建Document对象
准备工作Spring的XmlBeanDefinitionReader通过ResourceLoader创建了Resource对象后,又如何处理Resource对象呢?XmlBeanDefinitionReader拿到Resource对象后,会调用它的loadBeanDefinitions(Resource resource)方法,下面我们就根据这个方法为入口来探讨这个问题,见下面的代码。 pub
2017-02-08 12:03:48 2368
原创 Spring4.3.x 浅析xml配置的解析过程(2)——使用ResourceLoader创建Resource对象
概述在走进XmlBeanDefinitionReader中已经讲过XmlBeanDefinitionReader把xml配置信息转换成一个一个的BeanDefinition对象的大致过程,在这个过程中还有几个细节没有讲到,这一篇,就来探讨其中一个细节——ResourceLoader如何根据指定的location生成Resource对象。下面我们从XmlBeanDefinitionReader 使用x
2017-02-08 12:02:41 2798
原创 Spring4.3.x 浅析xml配置的解析过程(1)——使用XmlBeanDefinitionReader解析xml配置
概述Spring默认的BeanFactory是DefaultListableBeanFactory类,spring创建DefaultListableBeanFactory对象后,会把配置信息转换成一个一个的BeanDefinition对象,并把这些BeanDefinition对象注册到DefaultListableBeanFactory对象中,以供bean工厂创建bean实例。BeanDefinit
2017-02-08 12:00:34 6546
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人