
Spring源码分析
文章平均质量分 69
Hello Spring!
万物皆字节
思君 思国 思社稷,
赏花 赏月 赏秋香
展开
-
Spring之ConfigurationClassPostProcessor配置类后置处理器源码分析
ConfigurationClassPostProcessor 是spring框架中提供解析配置类的一个比较重要的后置处理器,其主要作用是解析配置类,即@Configuration标记的类其实现了BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor:在容器BeanFactory创建好并加载了已经配置(比如配置文件)的bean定义后,会执行 postProcessBeanDefinitionRegistry 方法和 postPr.原创 2021-11-14 09:50:15 · 1064 阅读 · 0 评论 -
Spring Conditional注解源码分析
入口核心入口:使该注解生效的是一个 BeanFactoryPostProcessors 即 ConfigurationClassPostProcessor,在refresh方法流程中会被执行;继承关系图(ConfigurationClassPostProcessor 实现了BeanDefinitionRegistryPostProcessor,BeanDefinitionRegistryPostProcessor继承了BeanFactoryPostProcessor)后置处理器注入那么 Con原创 2021-04-03 14:56:03 · 445 阅读 · 0 评论 -
Spring事务三:cglib方式代理,this调用不生效本质
基于自己之前对Spring代理生成的认知,大致的认为采用cglib框架生成目标类的子类;在父类方法体内使用this应该也是调用代理类的实例,那么容器应该能感知方法上的注解进而执行拦截(比如事务拦截器),但是事与愿违用this调用的没有让事务拦截生效。先来看我的定势思维想象:假设有父类F和子类Spublic class F { public void first() { this.second(); } public void second() { .原创 2020-12-13 13:31:29 · 2181 阅读 · 0 评论 -
Spring事务二:@EnableTransactionManagement
接上一篇《Spring事务一:tx 标签》在使用Spring-boot的时候,如果我们想开启事务可以在启动类上加一个注解 @EnableTransactionManagement,下面我们来分析一下内在原理原创 2020-09-20 12:08:29 · 1772 阅读 · 0 评论 -
Spring事务一:tx 标签
如果在spring中想根据Transactoional标签让代码赋能事务,最基础的使用方式是 tx:标签;那么标签是怎样起作用的呢我们来看看处理事务标签的namespacehandler:org.springframework.transaction.config.TxNamespaceHandlerpublic class TxNamespaceHandler extends NamespaceHandlerSupport { static final String TRANSACTIO原创 2020-09-19 16:21:57 · 1617 阅读 · 0 评论 -
Spring 组合注解
在JAVA1.5新特性描述里有这样一句话Annotation type declarations cannot be generic. (Annotation types implicitly extend annotation.Annotation.) 这表明了注解类之间不能有继承关系,在编译阶段注解类之间的继承是不被允许的(如下图); 如果我想共用一些注解的属性怎么办呢,毕竟继承带来的复用和代码量减少都是很可观的;在Spring中则“巧妙地”实现了这一功能。元注解能够标记在注解上的注原创 2020-07-26 07:28:13 · 869 阅读 · 0 评论 -
Spring @AliasFor使用
同一注解类中的@AliasFor这种场景比较简单,首先定义注解package com.uu.annotation;import org.springframework.core.annotation.AliasFor;import java.lang.annotation.*;@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @in原创 2020-07-25 17:52:58 · 629 阅读 · 0 评论 -
annotation-config 与 component-scan 标签
标签解析入口org.springframework.context.annotation.ComponentScanBeanDefinitionParser主方法很简洁,如下 public BeanDefinition parse(Element element, ParserContext parserContext) { String[] basePackages = StringUtils.tokenizeToStringArray(element.getAttribute(B原创 2020-06-19 16:20:03 · 388 阅读 · 0 评论 -
Spring 容器初始化源码跟读refresh07
现在到了最后一个关键方法了,其实看了很久这个源代码,不得不说代码是非常的绕,不过看的次数多了就慢慢熟悉了;// Instantiate all remaining (non-lazy-init) singletons.finishBeanFactoryInitialization(beanFactory);这个方法主要功能是将所有未标记 lazy-init的 singleton类...原创 2017-11-18 13:01:00 · 152 阅读 · 1 评论 -
Spring 创建代理类流程跟踪
调用链先来看一段堆栈信息【以spring3.0.6为例】,接下来分析aop标签乾坤Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'b1' defined in class path resource [a...原创 2017-11-17 11:12:00 · 166 阅读 · 0 评论 -
Spring 容器初始化源码跟读refresh06
这一篇介绍一下接下来几个方法// Initialize message source for this context.initMessageSource();该方法主要是用来管理国际化文件源码:/** * Initialize the MessageSource. * Use parent's if none defined in this co...原创 2017-11-16 12:29:00 · 140 阅读 · 0 评论 -
Spring 容器初始化源码跟读refresh05
接下来方法是// Register bean processors that intercept bean creation.registerBeanPostProcessors(beanFactory);源码:protected void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFac...原创 2017-11-15 21:16:00 · 132 阅读 · 0 评论 -
Spring 容器初始化源码跟读refresh04
接下来是// Allows post-processing of the bean factory in context subclasses.postProcessBeanFactory(beanFactory);该方法是一个空方法接下来是protected void invokeBeanFactoryPostProcessors(ConfigurableListableB...原创 2017-11-12 20:04:00 · 142 阅读 · 0 评论 -
Spring 容器初始化源码跟读refresh02
上一篇写到了loadBeanDefinitions方法@Override protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws BeansException, IOException { // Create a new XmlBeanDefinitionR...原创 2017-10-20 08:20:00 · 151 阅读 · 0 评论 -
Spring 容器初始化源码跟读refresh01
源码分析以3.0.6.RELEASE为范例****************************************************************// Prepare this context for refreshing.prepareRefresh();protected void prepareRefresh() { this...原创 2017-10-19 11:34:00 · 274 阅读 · 0 评论 -
spring getBean源码调用大致流程
大致调用流程以配置文件的方式为例org.springframework.context.support.AbstractApplicationContext.getBean(String)↓org.springframework.beans.factory.support.AbstractBeanFactory.getBean(String)↓org.springframewor...原创 2017-11-04 09:48:58 · 631 阅读 · 0 评论 -
手动向spring容器中注册BeanDefinition
如果我们想手动的在特定时机向容器注册beandefinition,为了能根据具体环境设置特定的属性值,比如我们自定义的数据源等;注册方法一定义的类可以实现BeanDefinitionRegistryPostProcessor接口,那么这个类的方法会在配置文件或者被注解的所有类注册完后进行调用;示例:package springsrc;import org.springfra原创 2018-01-25 21:28:04 · 2928 阅读 · 0 评论 -
Spring拦截指定方法的示例
方式一:在配置文件中使用aop标签配置<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/co原创 2018-01-31 11:04:35 · 887 阅读 · 0 评论 -
spring boot + mybatis + spring security 自定义登录界面环境搭建
*********例子可以在 码云上下载:https://gitee.com/aqu415/twboot.git (数据库脚本在readme目录)*********概述在前不久用了spring boot、mybatis、spring security搭建了一个工程,中间经历了各种坑,最后得到一条经验:spring的文档很详细,入门最好以官方文档为准。这里讲的是以maven作...原创 2017-12-03 22:11:16 · 11558 阅读 · 4 评论