原创 Object 源碼閱讀

Object 源碼閱讀 /** * Object 類是類繼承結構的根類,每一個類型都以 Object 作爲其父類,包括數組。 */ public class Object { private static native vo

原创 String 類源碼分析

String 源碼分析 String 類代表字符序列,Java 中所有的字符串字面量都作爲此類的實例。 String 對象是不可變的,它們的值在創建之後就不能改變,因此 String 是線程安全的。 String 的主要屬性 /

原创 SpringBoot 啓動流程

SpringBoot 啓動流程 加載 resources/META-INF/spring.factories 中配置的 ApplicationContextInitializer 和 ApplicationListener。 /**

原创 BeanDefinition 實例化過程

BeanDefinition 實例化過程 AbstractBeanFactory#doGetBean AbstractBeanFactory# /** * 根據 bean 名稱讀取 bean * *

原创 BeanDefinition 解析流程【解析所有配置類】

BeanDefinition 解析流程 BeanDefinition 解析入口:ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry ConfigurationC

原创 BeanDefinition 實例

BeanDefinition BeanDefinition /** * BeanDefinition 用於描述一個 bean 實例,包括屬性值、構造參數和補充信息。 */ public interface BeanDefiniti

原创 切面觸發過程

切面觸發過程 構建通知鏈 /** * 通知鏈工廠 */ public interface AdvisorChainFactory { /** * 基於指定的 Advised 配置生成 org.aopallia

原创 AOP 代理類的創建

AOP 代理類的創建 入口:AnnotationAwareAspectJAutoProxyCreator#postProcessAfterInitialization 和 AnnotationAwareAspectJAutoProxyCre

原创 @Aspect 註解切面解析

註解切面解析 註解切面解析器 /** * 註解切面解析器 */ public class BeanFactoryAspectJAdvisorsBuilder { /** * Bean 工廠 */

原创 Spring 緩存註解解析過程

Spring 緩存註解解析過程 通過 SpringCacheAnnotationParser 的 parseCacheAnnotations 方法解析指定方法或類上的緩存註解, @Cacheable 註解將被解析爲 CacheableOpe

原创 Spring 緩存註解 SpEL 表達式解析

緩存註解上 key、condition、unless 等 SpEL 表達式的解析 SpEl 支持的計算變量: 1)#ai、#pi、#命名參數【i 表示參數下標,從 0 開始】 2)#result:CachePut 操作和後處理 CacheE

原创 Spring 緩存切面

緩存切面:【通知+目標方法調用】 緩存操作執行過程: 1)如果是同步調用【sync=true】,則首先嚐試從緩存中讀取數據,讀取到則直接返回; 否則執行目標方法,將結果緩存後返回。 2)如果不是同步調用【sync=false,默認】 2-1

原创 Spring 由緩存切點驅動的通知者

Spring 緩存通知者和切點 緩存切點 /** * Spring 核心切點抽象 */ public interface Pointcut { /** * 類過濾器,當前切點是否需要織入在指定的類上 *

原创 SpEL 實例

SpEl 實例 基於 Spring 解析 @RestController @RequestMapping("/spel") @Slf4j public class SpELController implements Applicatio

原创 SPEL 表達式解析

Spring Expression Language 解析器 SPEL解析過程 使用 ExpressionParser 基於 ParserContext 將字符串解析爲 Expression, Expression 再根據 Evaluati