林烟夜暖

阅读JDK、框架源码的总结,微服务、RPC、服务治理实践等

Spring AOP源码分析(三)——拦截器链的执行过程分析

JdkDynamicAopProxy/ReflectiveMethodInvocation

Spring AOP源码分析(三)——拦截器链的执行过程分析 前面两篇文章分别介绍了Spring AOP是如何为目标bean筛选合适的通知器,以及如何创建代理对象的过程。现在得到了bean的代理对象,接下来就是代理对象的方法调用及通知的执行。通知可能在目标方法前执行,也可能在目标方法后执行。具体的执行时机,取决于用户的配置。当目标方法被多个通知匹配到时,Spring通过引入拦截器链来保证每...

Spring AOP源码分析(一)——筛选合适的通知器

AbstractAutoProxyCreator

Spring AOP源码分析(一)——筛选合适的通知器 本文接上一篇文章Spring-AOP-使用介绍-从前世到今生,开始分析Spring AOP相关的代码实现。主要分为筛选合适的通知器、创建代理和拦截器链的执行过程三个方面。下面先给出一个示例,然后根据示例引出源码分析。 代理示例(xml和注解两种配置): 最终的beanDefinitionMap Debug结果: 从Deb...

Spring AOP 使用介绍,从前世到今生

转自javadoop 前面写过 Spring IOC 的源码分析,很多读者希望可以出一个 Spring AOP 的源码分析,不过 Spring AOP 的源码还是比较多的,写出来不免篇幅会大些。 本文不介绍源码分析,而是介绍 Spring AOP 中的一些概念,以及它的各种配置方法,涵盖了 Spring AOP 发展到现在出现的全部 3 种配置方式。 由于 Spring 强大的向后兼容...

Spring IoC中的循环依赖问题及解决办法

Spring IoC中的循环依赖问题及解决办法 本文分析 Spring 是如何解决循环依赖问题的。在本篇文章中,首先介绍一下什么是循环依赖。然后,进入源码分析阶段。为了更好的说明 Spring 解决循环依赖的办法,文章将会从获取 bean 的方法getBean(String)开始,把整个调用过程梳理一遍。梳理完后,再来详细分析源码。 一、背景知识 1.什么是循环依赖 所谓的循环依赖是...

context:component-scan配置的解析与@Autowired注解的属性与方法的值注入

AutowiredAnnotationBeanPostProcessor

<context:component-scan/>配置的解析与@Autowired注解的属性与方法的值注入 前面的文章Spring IoC容器源码分析从大致的流程上,分析了Spring IoC容器的启动与Bean初始化流程。下面在此基础之上,首先分析Spring对xml配置中<context:component-scan/>元素的解析过程,然后分析@Autowire...

Spring IoC容器源码分析

IoC/AbstractApplicationContext.refresh()

Spring IoC容器源码分析 本文以5.1.4.RELEASE版本为源码版本,详细分析Spring Framework中第一个重要的概念——IoC以及IoC容器(另一个是AOP)。本文所述内容是基于xml的配置,这样相对简单,利于理解源码。基于Java的配置和组件扫描、自动配置的内容,后续在分析。 Spring IoC容器的创建过程实际分为2步,第一步是创建Bean容器(BeanFa...

CompletableFuture使用示例

CompletableFuture/CompletionStage

CompletableFuture使用示例 一、示例1 // {@link CompletableFuture} 使用实例 public class CompletableFutureTest { /* ------主动完成计算join/get/getNow/complete/completeExceptionally------ */ private static ...

Proxy动态代理源码分析

Proxy/InvocationHandler

Proxy动态代理源码分析 Proxy类主要用于实现动态代理机制,即代理类在程序运行时创建。下面先从一个实例出发,看看JDK如何实现动态代理。 一、实例 首先定义一个代理接口以及其实现类: public interface Subject { // 代理接口 void request(); } public class RealSubject implements Subj...

ThreadLocal源码分析

ThreadLocal

ThreadLocal源码分析 ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是static类型的,用于关联线程和线程的上下文。可以总结为一句话:ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个...

Thread类之线程间通讯

Thread

Thread类之线程间通讯 一、volatile与synchronized关键字 volatile关键字保证变量在线程间的可见性; synchronized关键字保证了线程对变量访问的互斥性。 synchronized举例如下: public class Synchronized { public static void main(String[] args){ /...