![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring
文章平均质量分 98
卓立~
现在一家电商做广告平台,Java后端后端开发
展开
-
Spring源码解读『AOP』
之前的文章我们介绍了Spring IOC的相关概念及相应的底层源码实现,本篇文章我们来看一下Spring的另一重要特性AOP的相关细节。1. AOP示例1.1 Bean interfacepackage com.zhuoli.service.spring.explore.aop.bean;public interface AopBean { void method1(); void method2();}1.2 Bean interface实现packag原创 2020-07-10 07:45:55 · 266 阅读 · 0 评论 -
Spring源码解读『通过配置类启动spring容器』
之前的介绍中,Spring容器都是通过xml配置文件启动的,在实际开发中,xml配置的使用是逐渐减少的,一般在开发中更建议使用Java Config。本篇文章我们就来看一下Spring容器如何通过配置类启动的。Spring提供了AnnotationConfigApplicationContext类,实现通过Java Config配置类来启动Spring容器。1. 示例1.1 定义Beanpublic class TestBeanA { private String testName原创 2020-07-10 07:45:11 · 578 阅读 · 0 评论 -
Spring源码解读『占位符@Value(“${…}”)替换』
上篇文章介绍了xml配置文件中占位符${…}的解析过程,本片文章我们来继续介绍Spring中另一种占位符@Value(“${…}”),这种占位符一般出现在Java Config中,如下:@Configurationpublic class MyConfiguration { @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String userName;原创 2020-07-10 07:44:22 · 6541 阅读 · 1 评论 -
Spring源码解读『占位符${…}替换』
在使用Spring时,对于一些比较固定的参数,我们一般会采用配置的方式,将这些参数配置在.properties配置文件中,然后在Bean初始化过程中替换为配置文件中配置的真实值。在Spring中,这种典型的的使用会存在以下两种方式:在xml配置中,通过${…}:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:原创 2020-07-10 07:43:37 · 5370 阅读 · 1 评论 -
Spring源码解读『@Configuration配置类』
上篇文章我们介绍了通过xml配置文件来解析Bean配置的过程,本篇文章我们来看另一种解析Bean配置的方式,@Configuration配置类。在Spring应用中,为了使用@Configuration配置类,如果使用xml启动ApplicationContext,我们一般会在xml配置文件中加上如下一行配置:<context:component-scan base-package="com.zhuoli.service.spring.explore.config"/>以告诉Sprin原创 2020-07-10 07:42:04 · 545 阅读 · 0 评论 -
Spring源码解读『配置文件解析』
之前的文章详细介绍了Bean的实例化和初始化的过程,但其实Bean能实例化、初始化的前提是Spring容器在启动时,间配置文件(配置类)中的配置加载成BeanDefinition,这一点我们再之前的文章Spring源码解读『IOC容器1-自定义实现IOC容器』一文中看得比较清楚。关于Spring对配置文件(配置类)的处理,我们还没有介绍,本篇文章我们就来介绍一下Spring容器启动时是如何加载xml配置文件并加载成BeanDefinition的,在下篇文章来介绍@Configuration配置类。首先来看一原创 2020-07-10 07:40:06 · 407 阅读 · 0 评论 -
Spring源码解读『Spring Bean循环依赖』
由于Spring的IOC特性,Bean都是由Spring容器生成的,那么如果Bean是单例的,存在两个Bean,分别为beanA、beanB,beanA依赖beanB,同时beanB也依赖beanA,那么可以想象假如容器不做特殊处理的话,就会发生循环依赖,产生死锁,Bean构造就进行不下去了。但是我们在使用时,其实并没有关注循环依赖的问题,Spring是可以解决这种循环依赖的情况的,本篇文章我们来看一下Spring是如何解决循环依赖的。1. Spring循环依赖示例首先定义两个Bean,BeanA和原创 2020-06-30 08:37:07 · 284 阅读 · 0 评论 -
Spring源码解读『Bean扩展接口』
上篇文章我们介绍了Spring Bean的初始化流程,在最后我们提到在通过populateBean方法调用后,调用了initializeBean方法,实现了一些列例如BeanNameAware、BeanPostProcessor等扩展接口的调用,本篇文章我们就来看一下Spring提供给开发者的一些扩展接口。Spring框架运用了非常多的设计模式,从整体上看,它的设计严格遵循了OCP——开闭原则:对修改关闭,外部无法修改Spring整个运作的流程 对扩展开放,可以通过继承、实现Spring提供的众多原创 2020-06-30 08:36:29 · 238 阅读 · 0 评论 -
Spring源码解读『IOC容器3-Bean初始化』
上篇文章我们介绍了Spring源码阅读的入口,分析了通过xml配置文件到Spring Bean初始化出来的流程。在上篇文章中,我们讲到,所有非懒加载的bean都是在finishBeanFactoryInitialization方法中完成实例化和初始化。由于该方法是整个Bean加载流程的核心方法,并且介绍起来篇幅较长,所以该方法单独在本篇文章介绍。在阅读源码之前,我们可以简单想象一下该方法的实现内容。在该方法执行之前,所有的Bean配置(通过xml配置文件或者配置类)都已经转变层BeanDefinition并原创 2020-06-30 08:35:47 · 278 阅读 · 0 评论 -
Spring源码解读『IOC容器2-Bean加载过程』
上篇文章,我们自定义实现了一个简单地IOC容器。本篇文章我们来介绍一下Spring IOC容器的实现。1. 准备工作为了学习Spring的源码实现,我们需要准备Spring的源码环境,这时我们一般可以有以下两种选择:1.1 下载spring-framework git项目将spring-framework git项目下载到本地git clone https://github.com/spring-projects/spring-framework.git将源码导入到Idea中这原创 2020-06-30 08:34:59 · 390 阅读 · 0 评论 -
Spring源码解读『IOC容器1-自定义实现IOC容器』
上篇文章介绍了Spring的相关基础概念,我们了解到Spring Framework提供的两个基础功能就是IOC和AOP。关于IOC容器我们分为两篇文章来介绍,本篇文章会介绍IOC容器的基础概念,并自定义实现一个基础的IOC容器,帮助我们后续更好的解读IOC源码。AOP会在之后的文章中介绍。1. IOC容器基本概念IOC(Inversion Of Control)也叫控制反转,这个概念经常会伴随另一个概念DI(Dependence Injection)依赖注入出现。直白的讲就是,Java中一个对象依原创 2020-06-30 08:31:52 · 609 阅读 · 0 评论 -
Spring源码解读『基本概念』
Spring作为一个优秀的开源框架,作为一名服务端开发人员,在工作中必然是每天都要接触的,相信每个人也都能熟练地使用Spring来完成日常工作。毫不夸张的讲,Spring很大程度上改变了Java开发的方式。但是在工作中,我发现很多数人对Spring的了解都停留在表面,很少去深究Spring这一优秀框架底层的原理。结合我自身的体会而言,在刚开始接触这个框架的时候,仅仅是生硬地去记它的一些使用特性,一旦遇到一些“非常规”问题,就搞不定了。随着使用的深入,疑惑的问题越来越多(比如框架给我们带来什么好处?Sprin原创 2020-06-30 08:31:08 · 346 阅读 · 0 评论