2024年3月6日
Spring PropertyPlaceholderConfigurerResolver 类全路径: org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.PropertyPlaceholderConfigurerResolver 这个类是从 Properties 中获取属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 private final class PropertyPlaceholderConfigurerResolver implements PlaceholderResolver { private final Properties props; private PropertyPlaceholderConfigurerResolver(Properties props) { this.props = props; } @Override @Nullable public String resolvePlaceholder(String placeholderName) { return PropertyPlaceholderConfigurer.this.resolvePlaceholder(placeholderName, this.props, systemPropertiesMode); } } 详细方法如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @Nullable protected String resolvePlaceholder(String placeholder, Properties props, int systemPropertiesMode) { String propVal = null; if (systemPropertiesMode == SYSTEM_PROPERTIES_MODE_OVERRIDE) { propVal = resolveSystemProperty(placeholder); } if (propVal == null) { propVal = resolvePlaceholder(placeholder, props); } if (propVal == null && systemPropertiesMode == SYSTEM_PROPERTIES_MODE_FALLBACK) { propVal = resolveSystemProperty(placeholder); } return propVal; } 1 2 3 4……
阅读全文
2024年3月6日
Spring PlaceholderResolver 类全路径: org.springframework.util.PropertyPlaceholderHelper.PlaceholderResolver 类作用将占位符中的内容替换成属性值. 假设现有属性表: user.dir = c:\home 传入参数 user.dir 会获得 c:\home 1 2 3 4 5 6 7 8 9 10 11 12 @FunctionalInterface public interface PlaceholderResolver { /** * Resolve the supplied placeholder name to the replacement value. * @param placeholderName the name of the placeholder to resolve * @return the replacement value, or {@code null} if no replacement is to be made */ @Nullable String resolvePlaceholder(String placeholderName); } 类图如下……
阅读全文
2024年3月6日
Spring 事务 Author: HuiFer 源码阅读仓库: SourceHot-Spring 声明式事务 Propagation 事务传播 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 public enum Propagation { /** * 有事务则加入,没有则新建 */ REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED), /** * 有事务就用,如果没有就不开启(继承关系) * @see org.springframework.transaction.support.AbstractPlatformTransactionManager#setTransactionSynchronization */ SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS), /** * 必须在已有事务中 */ MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY), /** * 不管……
阅读全文
2024年3月6日
引言:庞大的代码量让人心生怠倦,有趣的故事让技术也疯狂。 大家好,我是 IoC 容器家族的第 17 代传人,我们家族世世代代在 spring 商业街上卖烤面筋,大家都叫我“面筋哥”,另外我爹还给我起了个高大上的英文名字,叫“FileSystemXmlApplicationContext”,但有群臭猴子嫌麻烦,……
阅读全文
2024年3月6日
作者: Java4ye 概览 本文将讲解 Spring 的原理,看看一个 Bean 是怎么被创建出来的,中间经历过那几道工序加工,它的生命周期是怎样的,以及有哪些扩展点,后置处理器可以使用,让你对 Spring 多一些了解! 目录 本文会先大概介绍下这些知识点 👇 印象中的 Spring 脑海中有这么一条公式: 👉 IOC = 工厂模式 + XML + 反射 👉 而 DI , AOP , 事务 等也都……
阅读全文
2024年3月6日
1 设计原理与基本过程 在使用 Spring 声明式事务处理 的时候,一种常用的方法是结合 IoC 容器 和 Spring 已有的 TransactionProxyFactoryBean 对事务管理进行配置,比如,可以在这个 TransactionProxyFactoryBean 中为事务方法配置传播行为、并发事务隔离级别等事务处理属性,从而对声明式事务的处理提供指导。具体来说,在对声明式事务处理的原理分析中,声明式事务处理的实现大……
阅读全文
2024年3月6日
1 Spring 事务处理的应用场景 下面,我们以 DataSourceTransactionManager 事务管理器 为例,看一下在具体的事务管理器中如何实现事务创建、提交和回滚这些底层的事务处理操作。DataSourceTransationManager 和其他事务管理器一样,如 JtaTransactionManager,JpaTransaction……
阅读全文
2024年3月6日
1 事务处理的编程式使用 1 2 3 4 5 6 7 8 9 10 11 TransactionDefinition td = new DefaultTransactionDefinition(); // transactionManager 是某一个具体的 PlatformTransactionManager实现类 的对象 TransactionStatus ts = transactionManager.getTransaction(td); try { // 这里是需要进行事务处理的方法调用 } catch (Exception e) { transactionManager.rollback(ts); throw e; } transactionManager.commit(ts); 在使用编程式事务处理的过程中,利用 DefaultTransactionDefinition 对象 来持有事务处理属性。同时,在创建事务的……
阅读全文
2024年3月6日
JavaEE 应用中的事务处理是一个重要并且涉及范围很广的领域。事务管理的实现往往涉及并发和数据一致性方面的问题。作为应用平台的 Spring,具有在多种环境中配置和使用事务处理的能力,也就是说通过使用 Spring 的事务组件,可以把事务处理的工作统一起来,并为事务处理提供通用的支持。 在涉及单个数据库局部……
阅读全文
2024年3月6日
Servlet 温习 Servlet 是 Java 平台上用于扩展基于请求-响应模式的 Web 应用程序功能的一种技术。在这篇博客中,我们将温习一下 Servlet 的基本概念和使用方法。 1. Servlet 的基本概念 Servlet 是 Java 平台上运行的一个小程序,它可以接收和响应来自客户端的请求,并向客户端发送响应。Servlet 容器(如 Tomcat)负责管理 Servlet 的生命周期,……
阅读全文