- 博客(888)
- 资源 (19)
- 收藏
- 关注
原创 Spring AOP事务实现原理之TransactionSynchronizationManager,ConnectionHolder和DataSource
DataSourceTransactionObject在Spring AOP事务实现原理之事务管理器TransactionManager中有其源码,该类是DataSourceTransactionManager的静态内部类在DataSourceTransactionManager#doGetTransaction()方法中,会通过TransactionSynchronizationManager.getResource(obtainDataSource())方法获取到一个ConnectionHolder
2022-03-18 19:07:58 1523
原创 Spring AOP事务实现原理之事务管理器TransactionManager
TransactionManagerpublic interface TransactionManager {}PlatformTransactionManager这是 Spring 事务基础类中的中心接口。对于实现者,建议从提供的 {@link org.springframework.transaction.support.AbstractPlatformTransactionManager} 类派生,该类实现了事务的传播行为并负责事务同步处理。该类使用了模板模式,子类必须为底层事务的特定状态实
2022-03-16 23:41:17 3329
原创 Spring AOP事务实现原理之事务拦截器TransactionInterceptor
学习这篇博文需要首先明白Spring AOP的实现原理,可以参考Spring的BeanPostProcessor扩展点实现类AbstractAutoProxyCreator和Spring AOP创建代理类之JdkDynamicAopProxy这两篇博文。TransactionInterceptor该类是Advice实现类,用于对事务性的方法进行拦截,使用通用 Spring的事务基础类(PlatformTransactionManager/ReactiveTransactionManager)进行声明式
2022-03-16 23:32:35 4957
原创 Spring AOP事务实现原理之事务属性源AnnotationTransactionAttributeSource
AnnotationTransactionAttributeSource该类读取Spring的 {@link Transactional} 注解并将相应的事务属性TransactionAttribute暴露给 Spring 的事务管理器,如PlatformTransactionManager,ReactiveTransactionManager。还支持 JTA 1.2 的 {@link javax.transaction.Transactional} 和 EJB3 的 {@link javax.ejb.
2022-03-16 23:29:44 659
原创 Spring AOP事务实现原理之BeanFactoryTransactionAttributeSourceAdvisor
学习这篇博文需要首先明白Spring AOP的实现原理,可以参考Spring的BeanPostProcessor扩展点实现类AbstractAutoProxyCreator和Spring AOP创建代理类之JdkDynamicAopProxy这两篇博文。BeanFactoryTransactionAttributeSourceAdvisor由 {@link TransactionAttributeSource} 驱动的advisor,用于为事务性方法包含一个事务advice bean。public c
2022-03-16 23:26:24 1066
原创 Spring AOP事务实现原理之启用事务EnableTransactionManagement
学习这篇博文需要首先明白Spring AOP的实现原理,可以参考Spring的BeanPostProcessor扩展点实现类AbstractAutoProxyCreator和Spring AOP创建代理类之JdkDynamicAopProxy这两篇博文。EnableTransactionManagement启用 Spring 的注解驱动事务管理能力,和<tx:annotation-driven />是一样的。@EnableTransactionManagement和<tx:annot
2022-03-16 23:17:26 1068
转载 Spring FactoryBean
FactoryBeanpublic interface FactoryBean<T> { T getObject() throws Exception; Class<?> getObjectType(); boolean isSingleton();}应用场景FactoryBean 通常是用来创建比较复杂的bean,一般的bean 直接用xml配置即可,但如果一个bean的创建过程中涉及到很多其他的bean 和复杂的逻辑,用xml配置比较困难,这时可
2022-03-09 09:25:21 90
原创 Spring AOP创建代理类之JdkDynamicAopProxy
关于Spring如何获取advisor增强器集合的过程,可以看Spring的BeanPostProcessor扩展点实现类AbstractAutoProxyCreator,该文也是接着AbstractAutoProxyCreator继续解析的。前者是获取到advisor集合,该文是拿到这些advisor增强器创建代理对象,并设置advisor拦截器,以及在调用被代理的方法时,如何通过advisor拦截器进行增强。AopProxy用来实际生成代理对象的接口,通过AopProxyFactory接口暴露出来
2022-03-01 18:02:19 501
原创 Spring中Bean定义读取器BeanDefinitionReader
BeanDefinitionReaderbean 定义reader的简单接口,使用Resource和字符串location参数指定要加载的bean定义的资源位置。请注意,bean 定义reader不必实现此接口,它仅作为reader定义的建议。public interface BeanDefinitionReader { BeanDefinitionRegistry getRegistry(); @Nullable ResourceLoader getResourceLoader();
2022-02-15 18:18:35 1435
转载 Spring自定义标签和spring.handlers的加载过程
schema配置Spring自定义标签Spring自定义标签的原理XML通常通过DTD、XSD定义,但DTD的表达能力较弱,XSD定义则能力比较强,能够定义类型,出现次数等。自定义标签需要XSD支持,在实现时使用Namespace扩展来支持自定义标签。Spring通过XML解析程序将其解析为DOM树,通过NamespaceHandler指定对应的Namespace的BeanDefinitionParser将其转换成BeanDefinition。再通过Spring自身的功能对BeanDef
2022-02-15 13:16:07 280
原创 Spring的BeanFactoryPostProcessor扩展点实现类ConfigurationClassPostProcessor
BeanDefinitionRegistryPostProcessor对标准 {@link BeanFactoryPostProcessor} SPI 的扩展,允许在常规 BeanFactoryPostProcessor 检测开始之前进一步地注册bean定义。特别是BeanDefinitionRegistryPostProcessor 可以进一步地注册bean 定义,这些定义反过来定义 BeanFactoryPostProcessor 实例。public interface BeanDefinition
2022-02-11 18:00:06 629
原创 Spring中BeanDefinition的合并getMergedLocalBeanDefinition
在ApplicationContext的refresh方法中,finishBeanFactoryInitialization(beanFactory)这一步是初始化剩余的非懒加载的单例bean,之后会调用BeanFactory的preInstantiateSingletons()方法进行这些bean的加载工作。在preInstantiateSingletons方法中,首先会从beanDefinitionNames集合中获取所有的beanName,之后会循环进行getBean。但是在getBean之前,会
2022-01-27 16:14:23 1795
原创 Spring的BeanPostProcessor扩展点实现类AbstractAutoProxyCreator
AbstractAutoProxyCreatorSmartInstantiationAwareBeanPostProcessor接口继承自InstantiationAwareBeanPostProcessor接口。因此AbstractAutoProxyCreator一般是通过InstantiationAwareBeanPostProcessor接口的postProcessBeforeInstantiation方法和postProcessAfterInitialization方法来返回代理对象;pos
2022-01-26 16:09:45 880
原创 Spring的BeanPostProcessor扩展点实现类AutowiredAnnotationBeanPostProcessor
实现Spring自动注入依赖的功能,在bean实例化后,进行这重要的初始化操作。public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter implements MergedBeanDefinitionPostProcessor, PriorityOrdered, BeanFactoryAware {}postProcessPropertyValues @De
2022-01-26 16:08:38 1405
原创 Spring的BeanPostProcessor扩展点实现类CommonAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessorpostProcessPropertyValues @Deprecated @Override public PropertyValues postProcessPropertyValues( PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) { return postProcessProperties(pvs, be
2022-01-26 16:07:18 446
原创 Spring上下文刷新refresh过程流程图
下图是自己画的refresh的过程蓝色块:涉及到的class类紫色块:比较重要的节点绿色块:涉及到的spring扩展点
2022-01-26 09:40:03 472
原创 Spring的工厂类BeanFactory接口及相关实现类DefaultListableBeanFactory
先通过UML图总体了解下Spring的BeanFactory的结构
2022-01-22 23:00:13 952
原创 Spring的BeanPostProcessor扩展点
BeanPostProcessorpostProcessBeforeInitialization /** * 在任何bean初始化回调方法调用之前(如 InitializingBean 的 {@code afterPropertiesSet} 或自定义初始化方法),会执行该方法。 * 此时bean已经被填充了属性值,即执行过了populateBean方法。 * 返回的 bean 实例可能是原始实例的经过包装后的bean。 * 默认实现是按原样返回给定的 {
2022-01-22 12:21:45 836
原创 SpringMvc项目集成Nacos配置中心
Spring版本要求因为spring.profiles.active是从spring3.1版本开始有的,而该属性是我们在此集成中需要用到的,因此对spring版本的要求是在3.1以上Spring版本与JDK版本兼容范围 Spring Framework 5.3.x: JDK 8-19 (expected) Spring Framework 5.2.x: JDK 8-15 Spring Framework 5.1.x: JDK 8-12 Spring Framewo
2022-01-14 18:43:07 6603
原创 datax从mysql数据库到mysql数据库传输中文数据目标表出现乱码问题
乱码问题如下图:解决方法:1.将datax的reader和writer中使用的mysql-connector的版本升级,我这里将其替换为mysql-connector-java-5.1.49.jar,datax原来使用的是5.1.34版本。使用这种方式后发现没有解决问题,后来有进行了下一步的修改2.在连接mysql的jdbcURL中添加如下:?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&use..
2021-12-20 12:36:35 1367
原创 2-3-4树与红黑树的转换规则及插入、删除操作等价示例
2-3-4树与红黑树是多叉树与二叉树的关系,看上去完全不同,但是在某种意义上它们又是完全相同的,一个可以通过应用一些简单的规则变成另一个,而且使他们保持平衡的操作也是一样,数学上称他们为同构。转化规则应用如下三条规则可以将2-3-4树转化为红黑树:把2-3-4树中的每个2-节点转化为红黑树的黑色节点。 把每个3-节点转化为一个子节点和一个父节点,子节点有两个自己的子节点:W和X或X和Y。父节点有另一个子节点:Y或W。哪个节点变成子节点或父节点都无所谓。子节点涂成红色,父节点涂成...
2021-11-19 15:10:46 430
转载 二叉树 红黑树 B树 B+树的优缺点
前言在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么选择B+树作为索引结构。一、二叉查找树(BST):不平衡二叉查找树(BST,Binary Search Tree),也叫二叉排序树,在二叉树的基础上需要满足:任意节点的左子树上所有节点值不大于根节点的值,任意节点的右子树上所有节点值不小于根节点的值。如下是一颗BST(图片来源)。
2021-11-19 15:03:00 1416
原创 Spring getBean和createBean的过程及三级缓存
DefaultSingletonBeanRegistry三级缓存在该类中,有如下三个属性,是bean的三级缓存/** 一级缓存,保存singletonBean实例的映射: bean name --> bean instance */private final Map<String, Object> singletonObjects = new ConcurrentHashMap(256);/** 二级缓存,保存早期未完全创建的Singleton实例的映射: bean name -
2021-09-30 13:50:02 394
原创 AbstractBeanDefinition的initMethodName/destroyMethodName属性及@PostConstruct/@PreDestroy
在AbstractBeanDefinition中有两个属性private String initMethodName; private String destroyMethodName;xml的相关配置他们对应的是xml配置文件中bean标签的如下两个属性:destroy-method它的作用是在销毁bean之前可以执行指定的方法。注意:必须满足scope=“singleton”,并且destroy方法参数个数不能超过1,并且参数类型只能为boolean。init-metho
2021-09-27 12:35:00 228
原创 AbstractBeanDefinition的MethodOverrides属性及@LookUp
使用场景及问题在Spring的诸多应用场景中bean都是单例形式,当一个单例bean需要和一个原型bean组合使用或者一个原型bean和另一个原型bean组合使用时,我们通常都是将依赖以属性的方式放到bean中来引用,然后以@Autowired来标记需要注入的属性。但是这种方式在bean的生命周期不一样的时候将会出现问题,假设单例bean A需要一个原型bean B,我们在A中注入bean B,每次调用bean A中的方法时都会用到bean B,Spring Ioc容器只在容器初始化时执行一次,也就是b
2021-09-26 18:09:10 321
原创 AbstractBeanDefinition的autowireMode自动装配模式属性
在AbstractBeanDefinition中有一个属性是autowireMode,该属性表示自动装配模式在Spring中,注入方式有两种通过set方法通过构造函数(如果有多个构造函数会选择参数多的构造方法)手动装配注入:@Resource: 默认是通过name来查找注入值,如果不存在就报错@Autowired 通过类型查找(类型),然后再通过nameAutowireMode(自动装配模型):在spring中有四种模式分别是:AUTOWIRE_NO = 0:默认装配模式
2021-09-26 14:22:06 1027
原创 BeanDefinition接口关系图及相关实现类
BeanDefinition关系图BeanDefinitionBeanDefinition接口用于描述一个bean实例的属性及构造参数等元数据;主要提供了父beanname,bean类名,作用域,懒加载, bean依赖,自动注入候选bean,等熟悉的设置与获取操作。同时提供了判断bean是否为单例、原型模式、抽象bean的操作,及获取bean的描述,资源描述,属性源,构造参数,原始bean定义等操作。public interface BeanDefinition extends AttributeA
2021-09-24 15:34:09 243
原创 Spring的post processor工具类PostProcessorRegistrationDelegate
PostProcessorRegistrationDelegatePostProcessorRegistrationDelegate是AbstractApplicationContext委托执行post processors任务的工具类。这里的postProcessor包括两类 :BeanFactoryPostProcessorBeanPostProcessorBeanFactoryPostProcessor又细分为两类:BeanDefinitionRegistryPostProc
2021-09-17 13:43:53 542
原创 SpringBoot环境Environment
Environment关系图AbstractEnvironmentpublic abstract class AbstractEnvironment implements ConfigurableEnvironment { public static final String IGNORE_GETENV_PROPERTY_NAME = "spring.getenv.ignore"; //profiles激活文件 public static final String ACTIVE
2021-09-16 12:31:39 967
原创 SpringBoot属性解析器PropertyResolver
PropertyResolverPropertyResolver属性解决器,主要具有两个功能:通过propertyName属性名获取与之对应的propertValue属性值(getProperty)把${propertyName:defaultValue}格式的属性占位符,替换为实际的值(resolvePlaceholders)注意:getProperty获取的属性值,全都是调用resolvePlaceholders进行占位符替换后的值。public interface PropertyRes
2021-09-16 12:30:05 654
原创 SpringBoot属性源PropertySource
PropertySourcePropertySource主要是对属性源的抽象,包含属性源名称和属性源内容对象。其方法主要是对这两个字段进行操作。public abstract class PropertySource<T> { //属性源名称 protected final String name; //属性源 protected final T source; // 构造器 public PropertySource(String
2021-09-15 18:23:54 1365
原创 SpringBoot应用上下文ApplicationContext
AbstractApplicationContextpublic abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext { //在此工厂中,国际化消息 MessageSource 的 bean的名称 //如果没有提供消息,消息解析将委托给父节点。 public static final String MESSA
2021-09-10 13:01:58 1809
原创 SpringBoot启动流程之SpringApplication.run()运行阶段之refreshContext
SpringApplication构造SpringApplication之后,就会调用ApingApplication的非静态run方法,进入运行阶段 public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext c
2021-09-10 12:56:50 280
原创 SpringBoot启动流程之SpringApplication.run()运行阶段之prepareContext
SpringApplication构造SpringApplication之后,就会调用ApingApplication的非静态run方法,进入运行阶段 public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext c
2021-09-10 12:55:13 336
原创 SpringBoot启动流程之SpringApplication.run()运行阶段之prepareEnvironment
SpringApplication构造SpringApplication之后,就会调用ApingApplication的非静态run方法,进入运行阶段 public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext c
2021-09-10 12:50:09 351
原创 SpringBoot启动流程之SpringApplication.run()运行阶段之SpringApplicationRunListener
SpringApplication构造SpringApplication之后,就会调用ApingApplication的非静态run方法 public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = nu
2021-09-05 17:25:24 685
原创 SpringBoot启动流程之SpringApplication构造阶段
SpringApplication public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { this.sources = new LinkedHashSet(); this.bannerMode = Mode.CONSOLE; this.logStartupInfo = true; this.addComman
2021-09-03 19:05:14 159
原创 Nacos config对spring-cloud-context的扩展实现配置的加载
关于Spring Cloud上下文的介绍,请参考SpringCloud上下文关于Nacos的config配置中心介绍,请参考Nacos对spring-cloud配置中心的实现本文主要介绍Nacos怎么通过自定义引导类配置org.springframework.cloud.bootstrap.BootstrapConfiguration,来实现在主应用程序启动的时候从Nacos配置中心读取配置的外部属性BootstrapConfiguration在spring cloud context的s.
2021-09-02 21:00:45 495
画流程图的软件DiagramDesigner
2011-05-16
割顶,割边,连通分支割顶,割边,连通分支
2011-04-30
图论——支撑树图论——支撑树图论——支撑树
2011-04-30
浙江大学acm,吉林大学acm模板
2011-04-30
浙大android教学
2011-04-30
word格式转换成pdf格式
2011-04-08
ER_designer
2011-04-07
android资料4
2011-04-02
android资料3
2011-04-02
浙大算法包,几何 结构\数论\数值计算\图论_NP搜索\图论_连通性\图论_匹配\组合\
2009-04-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人