![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring
_jan_
这个作者很懒,什么都没留下…
展开
-
spring4.3.6源代码 - tx - 如何支持@Transactional注解下的数据库操作使用同一个连接
1、居于TransactionSynchronizationManager.getResource(this.dataSource) 从线程上下文resources获取ConnectionHolder对象spring-tx(@Transactional)// org.springframework.transaction.support.AbstractPlatformTransactionManager#getTransactionpublic final Transacti...原创 2021-02-05 11:59:58 · 579 阅读 · 0 评论 -
spring boot 1.5.3 源代码片段 - webmvc - @ControllerAdvice 注解
用途:1、支持扩展 @ModelAttribute 注解的方法 -- 全局 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#initControllerAdviceCache2、支持扩展 @InitBinder 注解的方法 -- 全局 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHa...原创 2021-01-11 20:04:45 · 106 阅读 · 0 评论 -
spring boot 1.5.3 源代码片段 - @Retryable 注解 - RetryTemplate#doExecute
// org.springframework.retry.support.RetryTemplate#doExecuteprotected <T, E extends Throwable> T doExecute(RetryCallback<T, E> retryCallback, RecoveryCallback<T> recoveryCallback, RetryState state) throws E, ExhaustedRetryExce...原创 2020-12-22 15:32:14 · 311 阅读 · 0 评论 -
spring boot 1.5.3 源代码片段 - ClassWriter 生成 *.class 格式的文本
org.springframework.expression.spel.standard.SpelCompiler#createExpressionClassprivate Class<? extends CompiledExpression> createExpressionClass(SpelNodeImpl expressionToCompile) { // Create class outline 'spel/ExNNN extends org.springframework.原创 2020-12-11 17:19:05 · 146 阅读 · 0 评论 -
spring boot 1.5.3 源代码片段 - ClassReader 解析 *.class 格式的文本
public ClassReader(final byte[] b, final int off, final int len) { this.b = b; // checks the class version /* SPRING PATCH: REMOVED FOR FORWARD COMPATIBILITY WITH JDK 9 if (readShort(off + 6) > Opcodes.V1_8) { ...原创 2020-12-11 16:39:54 · 290 阅读 · 0 评论 -
spring boot 1.5.3 源代码片段 - MetadataReader读取*.class文件
解析class文件,读取类元信息package cn.java.demo.beantag.internal.metareader;import lombok.Data;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class FooOneService extends FooOneSuper0 implements FooOneInterface, FooTwoInterface { public void method0() {原创 2020-12-11 16:32:31 · 281 阅读 · 0 评论 -
spring boot 1.5.3 源代码片段 - 数据绑定 BeanWrapper
代码package cn.java.demo.base.internal.bean_wrapper;import lombok.Data;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.BeanWrapper;import org.springframework.beans.MutablePropertyValues;import org.springframework.beans.Property...原创 2020-12-03 15:17:17 · 107 阅读 · 1 评论 -
spring boot 1.5.3 源代码片段 - 数据绑定 PropertiesConfigurationFactory
package cn.java.demo.base.internal.properties_config;import lombok.Data;import lombok.extern.slf4j.Slf4j;import org.springframework.boot.bind.PropertiesConfigurationFactory;import org.springframework.boot.context.properties.ConfigurationPropertie...原创 2020-12-03 14:38:43 · 589 阅读 · 0 评论 -
spring boot 1.5.3 源代码片段 - spring-messaging - DefaultSubscriptionRegistry
订阅者注册中心org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry1、访问缓存2、更新缓存3、数据存储org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry.DestinationCacheprivate class DestinationCache { /** Map from destination ->原创 2020-11-25 19:08:09 · 201 阅读 · 0 评论 -
spring boot 1.5.3 源代码片段 - tx - @Transactional 注解的属性
protected TransactionAttribute parseTransactionAnnotation(AnnotationAttributes attributes) { RuleBasedTransactionAttribute rbta = new RuleBasedTransactionAttribute(); Propagation propagation = attributes.getEnum("propagation"); rbta.setPropagationBe.原创 2020-11-24 17:54:07 · 140 阅读 · 0 评论 -
spring boot 1.5.3 源代码片段 - webmvc - handler适配器RequestMappingHandlerAdapter
参数解析器默认“带@ModelAttribute注解或者带@RequestMapping注解的方法”参数解析器:默认“带@ModelAttribute注解或者带@RequestMapping注解的方法”参数解析器: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.getDefaultArgumentResolvers() { List<HandlerMethodArg原创 2020-11-19 10:45:02 · 268 阅读 · 0 评论 -
spring boot 1.5.3 源代码片段 - webmvc - DataBinder数据绑定
@Slf4jpublic class DataBinderTest { public static void main(String[] args) { { // 要填充的目标对象 & 绑定器 FooOneEntity bindObject = new FooOneEntity(); String fooFieldName = "name"; DataBinder da...原创 2020-11-18 19:42:23 · 153 阅读 · 0 评论 -
spring boot 1.5.3 源代码片段 - webmvc - handler适配器AnnotationMethodHandlerAdapter【已废弃】
方法请求参数注解方法每个参数可包含的注解有:@RequestParam、@RequestHeader、@RequestBody、@CookieValue、@PathVariable、@ModelAttribute、@Value、@Validated其中互斥的注解有:@RequestParam、@RequestHeader、@RequestBody、@CookieValue、@PathVariable、@ModelAttributefor (Annotation paramAnn : p...原创 2020-11-18 18:47:44 · 349 阅读 · 0 评论 -
spring boot 1.5.3 源代码 - 对注解支持的核心点
spring boot 对注解的支持触发点org.springframework.boot.SpringApplication.run(...){ org.springframework.boot.SpringApplication.prepareContext(...) { org.springframework.boot.SpringApplication.prepareContext(...) { org.spring原创 2020-09-13 21:57:05 · 63 阅读 · 0 评论 -
spring boot 1.5.3 源代码 - 扩展机制 - 自动配置
org.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelector@Override public String[] selectImports(AnnotationMetadata annotationMetadata) { if (!isEnabled(annotationMetadata)) { return NO_IMPORTS; } try { /* 获取自动配置元...原创 2020-09-13 21:34:37 · 109 阅读 · 0 评论 -
spring boot 1.5.3 源代码 - 启动流程
1、初始化 1、获取 initializers // 加载类路径中所有"META-INF/spring.factories"文件中的所有属性文件,查找键为“org.springframework.context.ApplicationContextInitializer”的类列表,实例化所有ApplicationContextInitializer类 setInitializers((Collection) getSpringFactoriesInstance...原创 2020-09-13 21:24:17 · 107 阅读 · 0 评论 -
spring4.3.6源代码 - webmvc - BeanNameUrlHandlerMapping 路由识别、拦截器识别、路由匹配、参数解析器、返回值处理器
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping--------------BeanNameUrlHandlerMapping如何扫描Interceptor、Handler-------------------org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(ApplicationContext c...原创 2020-08-25 19:28:27 · 142 阅读 · 0 评论 -
spring4.3.6源代码 - webmvc - RequestMappingHandlerMapping 路由识别、拦截器识别、路由匹配、参数解析器、返回值处理器
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping --------------RequestMappingHandlerMapping如何感知Interceptors------------------- // 1.通过xml声明注入的拦截器 org.springframework.web.servlet.handler.AbstractHandlerMapping.setInte.原创 2020-08-25 19:26:40 · 474 阅读 · 0 评论 -
spring4.3.6源代码 - webmvc - DispatcherServlet 初始化、接收请求
初始化// Set bean properties from init parameters.try { PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties); /* 用BeanWrapperImpl对象包装DispatcherServlet */ BeanWrapper bw = PropertyAc...原创 2020-08-23 12:13:58 · 170 阅读 · 0 评论 -
spring4.3.6源代码 - web - XmlWebApplicationContext 刷新、关闭
refreshvoid refresh_Debug() { if (false) { refresh(); } /* 《特殊》 1、替换 ServletEnvironment 属性源 StandardServletEnvironment.SERVLET_CONTEXT_PROPERTY_SOURCE_NAME StandardServletEnvironment.SERVL...原创 2020-08-21 23:40:16 · 253 阅读 · 0 评论 -
spring4.3.6源代码 - core - spring.schemas、spring.handlers的使用
"META-INF/spring.handlers" 文件的使用// "META-INF/spring.handlers" 文件的使用org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(){ // ... DefaultListableBeanFactory beanFactory = createBeanFactory(); // 创建bea...原创 2020-08-08 16:25:34 · 188 阅读 · 0 评论 -
spring4.3.6源代码 - core - 已知的设计模式
spring已知的设计模式1、代理 org.springframework.aop.framework.JdkDynamicAopProxy#getProxy(java.lang.ClassLoader) { // ... return Proxy.newProxyInstance(classLoader, proxiedInterfaces, this); // ... }2、visitor 定义 org.springframework.core.type.classre.原创 2020-08-08 11:51:45 · 166 阅读 · 0 评论 -
spring4.3.6源代码 - core - 循环依赖的处理
// 注册别名是检查循环依赖org.springframework.core.SimpleAliasRegistry.registerAlias(){ checkForAliasCircle(name, alias); // 检查别名注册循环依赖}// 创建bean时检查循环依赖org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(){ if (sharedInstance !=...原创 2020-08-08 11:49:21 · 105 阅读 · 0 评论 -
spring4.3.6源代码 - tx - 命名空间处理器 & Processor
<tx:annotation-driven .../>使用的是aop机制: ”advisor“、”拦截器“、”注解解析器“<tx:annotation-driven transaction-manager="transactionManagerx" mode="proxy" /> 启动aop的功能,并注册aop的自定义Advisor对象到BeanDefinition容器{ 1、注册 TransactionalEventListenerFactor...原创 2020-08-06 22:06:56 · 160 阅读 · 0 评论 -
spring4.3.6源代码 - aop - 命名空间处理器 & Processor & 代理机制
注册 XxxAspectJAwareAdvisorAutoProxyCreator的时候有个优先级关系 APC_PRIORITY_LIST.add(InfrastructureAdvisorAutoProxyCreator.class); APC_PRIORITY_LIST.add(AspectJAwareAdvisorAutoProxyCreator.class); APC_PRIORITY_LIST.add(AnnotationAwareAspectJAutoProxy...原创 2020-08-05 19:35:22 · 269 阅读 · 0 评论 -
spring4.3.6源代码 - context - Processor
org.springframework.context.annotation.ConfigurationClassPostProcessor{ 1、public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) { 1、获取所有 <已经注册的bean列表> 2、获取配置候选人 for(迭代所有 <已经注册的bean列表>) { if 如be...原创 2020-08-03 10:07:17 · 142 阅读 · 0 评论 -
spring4.3.6源代码 - core - Processor
会被自动识别,并计入beanFactory的三个特征接口 org.springframework.beans.factory.config.BeanPostProcessor org.springframework.beans.factory.config.BeanFactoryPostProcessor org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor...原创 2020-07-30 20:06:41 · 77 阅读 · 0 评论 -
spring4.3.6源代码 - context - 命名空间处理器
<context:component-scan ... /><context:component-scan ... /> org.springframework.context.config.ContextNamespaceHandler.parse(...) { org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(...) { 1、创建扫描器 ...原创 2020-07-30 19:13:56 · 159 阅读 · 0 评论 -
spring4.3.6源代码 - beans - bean的创建、销毁、BeanPostProcessor
case1:被InstantiationAwareBeanPostProcessor拦截 1、-- 调用实现InstantiationAwareBeanPostProcessor接口的hooker的postProcessBeforeInstantiation方法,创建并返回实例 2、-- 调用实现BeanPostProcessor接口的hooker的postProcessAfterInitialization方法case2:没被InstantiationAwareBeanPostProce...原创 2020-07-30 20:03:19 · 160 阅读 · 0 评论 -
spring4.3.6源代码 - beans - Autowire(自动装配)
byNamebyTypeconstructorautodetect原创 2020-07-25 16:02:38 · 121 阅读 · 0 评论 -
spring4.3.6源代码 - beans - Lifecycle的应用
1、编写实现Lifecycle接口的beanpackage cn.java.demo.beantag.lifecycle;import org.springframework.context.Lifecycle;/** * 不能自动启动 * @author zhouzhian */public class FooOneLifecycle implements Lifecycle { boolean isRunning = false; @Override public void原创 2020-07-23 14:40:17 · 69 阅读 · 0 评论 -
spring4.3.6源代码 - beans - 属性值使用占位符[PropertyPlaceholderConfigurer]
1、编写配置文件# classpath:/cn/java/demo/beantag/placeholder0.properties# beanPlaceholderTest0 \u7684\u52A8\u6001\u914D\u7F6EbeanPlaceholderTest0.factoryMethod=getCreatedByFactoryBeanbeanPlaceholderTest0.scope=prototypebeanPlaceholderTest0.constructor...原创 2020-07-23 14:35:14 · 101 阅读 · 0 评论 -
spring4.3.6源代码 - beans - 编写自己的scope[CustomScopeConfigurer]
1、编写自己的scope处理器package cn.java.demo.beantag.customscope;import java.util.Collections;import java.util.HashMap;import java.util.LinkedHashSet;import java.util.Map;import java.util.Set;import java.util.concurrent.ConcurrentHashMap;import org.a...原创 2020-07-23 14:25:18 · 400 阅读 · 0 评论 -
spring4.3.6源代码 - beans - 关于AbstractBeanDefinition的属性
isSynthetic属性org.springframework.beans.factory.support.AbstractBeanDefinition#isSyntheticisSynthetic(表示硬编码创建的BeanDefinition)如果一个BeanDefinition的synthetic属性被标记为true,那么这个bean在获取的过程中不会应用BeanPostProcessorsscope属性...原创 2020-07-23 12:22:10 · 562 阅读 · 0 评论 -
spring4.3.6源代码 - core - XxxApplicationContext的refresh方法代码片段
《****** 关于hook的注入机制 ******》 org.springframework.context.support.ClassPathXmlApplicationContext org.springframework.web.context.support.XmlWebApplicationContext org.springframework.context.support.AbstractApplicationContext.refresh() { AbstractAp.原创 2020-07-22 20:30:26 · 152 阅读 · 0 评论 -
spring4.3.6源代码 - core - ClassPathXmlApplicationContext 实例化并刷新、启动、关闭
启动ApplicationContext context = new ClassPathXmlApplicationContext("classpath:cn/java/demo/beantag/applicationContext.xml"); org.springframework.context.support.ClassPathXmlApplicationContext { org.springframework.context.support.ClassPathXml...原创 2020-07-22 20:26:04 · 304 阅读 · 0 评论 -
spring4.3.6源代码 - 开始
再回首,记忆已是3年前(2017),记得当时读了spring4.3.6 大部分“扩展”的源代码。收获颇多。现如今再看,已经颇感生疏,特此打算写系列博客以便记录。现spring已到5.2.x,虽版本差异较大,但自觉万变不离其宗。spring-core、spring-beans、spring-context是其核心...原创 2020-07-22 20:14:55 · 101 阅读 · 0 评论