
Spring
文章平均质量分 95
Cison chen
此用户并不懒,但是什么简介都没有
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring 事务第四篇 - Spring 事务遇到AOP会怎么样?
前言 前面的文章探索了怎么拦截事务方法,怎么对其进行增强。但是我们讲解 AOP 的时候也聊过,如果想对一个对象进行增强,首先要生成一个代理对象,然后找到增强对象的拦截器链,这样才能逐个执行拦截方法进行增强。此外本文还会解答下上文提到的一个问题,就是当 AOP 和事务同时开启的话会怎么办呢?InfrastructureAdvisorAutoProxyCreator 我们前文也已经分析过,通过@EnableTransactionManagement 会引入该后置处理器,...原创 2021-09-28 00:35:28 · 1971 阅读 · 2 评论 -
Spring AOP-代理对象增强目标方法的流程,通知方法到底什么执行顺序
目录前言流程图 以 MethodBeforeAdviceInterceptor 为例探讨递归流程通知方法执行的顺序是什么呢?总结前言 本文讨论的内容为代理对象如何对切点方法进行增强,即如何协调执行各个通知方法来实现对连接点方法的增强。所以本文的前提是通知方法已经排好序,代理对象已经创建出来了。现在的时间点是业务层调用了切点方法,问题是切点方法和各个通知方法如何增强。此外因为 AOP 场景下 JdkDynamicAopProxy 用...原创 2021-09-27 00:12:17 · 925 阅读 · 0 评论 -
Spring AOP - 通知方法的执行顺序
前言 我们知道可以通过注解的方式来定义通知方法,如 @Before,@After 等,那么当执行连接点方法的时候这些通知方法的执行的执行顺序是什么呢?本篇文章就是探讨这个问题的,关于 advisor, pointCut,切面等定义以及生成 advisor 的时间点前面文章都已经介绍过,所以本篇只讨论 advisor 数组排序相关的内容。第一次排序,遍历切面方法时排序 我们知道,生成 advisor 实例首先要解析切面类,更准确的说是解析通知方法上的注解,根据不同的注解...原创 2021-09-26 14:18:06 · 1192 阅读 · 0 评论 -
Spring 事务第三篇-Spring 如何拦截事务方法并对其增强?
目录前言不得不提的 @EnableTransactionManagementTransactionManagementConfigurationSelectorAutoProxyRegistrarProxyTransactionManagementConfigurationTransactionAttributeSourceBeanFactoryTransactionAttributeSourceAdvisorTransactionInterc...原创 2021-09-23 00:04:40 · 1180 阅读 · 0 评论 -
Spring 事务第二篇-Spring 事务源码解析之事务管理器
前言 相信看了前面的文章,已经知道怎么怎么使用 java 操作数据库,怎么使用事务来管理多个数据库操作。在会使用之后自然是要继续研究一下,Spring 事务到底是如何实现的呢?不同传播类型的事务是怎么管理的呢?事务怎么管理数据库连接呢?又是怎么提交和回滚的呢?本文主要就是探讨这些问题。事务管理器-PlatformTransactionManager 还记得上篇文章讲解事务使用的时候都是进行了什么配置吗?首先是数据源 DataSource,它用来保存管理数据库连接,其...原创 2021-09-20 23:59:29 · 851 阅读 · 0 评论 -
Spring 事务第一篇-关于 Spring 事务你需要知道哪些?
前言 通过上一篇文章,我们知道了怎么获取数据库连接,怎么操作数据库。本篇文章的主要内容是事务,首先会讲一些概念性的东西,然后会讲 Spring 怎么使用事务,最后深入源码解析一下事物管理器 DataSourceTransactionManager 的工作原理。什么是事务? 事务就是把一组操作当成一个操作来做,这一组操作要么全部成功,要么全部失败。从表现形式上看就像执行了一个操作一样,这就是事务的作用。事务有哪几类?编程式事务:什么是编程式事务呢?无非就是自己写...原创 2021-09-17 23:57:15 · 228 阅读 · 0 评论 -
Spring 事务前序 - Java 如何操作数据库
目录前言你一定知道的 JDBC你见过但是可能不了解的 DataSource你一定用过的 JdbcTemplate需要的一些依赖总结前言 接下来的几篇文章是为了讲 Spring 事务,但是在此之前还是要提一下基本的一些操作数据库的方式。因为框架虽然方便了我们的操作,但是其还是依赖底层的一些操作数据库的方式的,无非是对底层一些基本的操作方式进行一些封装,如果对底层的一些知识都了然于胸,那么再往下学的话就会容易很多。因为这篇文章主要是为了给后面讲事务做铺垫的,所以举的...原创 2021-09-16 09:25:30 · 893 阅读 · 0 评论 -
什么是 DataSource?什么又是 DruidDataSource?
概述 DataSource 翻译过来为数据源,它是 jdk 提供的一个接口,然后只提供了两个 getConnection 方法,分别是无参数和需要传入用户名和密码。所以说它是跟数据库连接有关的东西,可以通过它来获取数据库连接。public interface DataSource extends CommonDataSource, Wrapper { /** * <p>Attempts to establish a connection with the d...原创 2021-09-15 22:51:10 · 13659 阅读 · 2 评论 -
Spring AOP 第三篇-由点到面全面解析Spring AOP
前言 前面两篇关于 SpringAOP 的文章基本把 Spring AOP 的内容都讲的差不多了,包括动态代理,拦截器,切点,切面和通知等。相信读了前面文章的同学也已经知道了怎么解析切面,怎么根据切面去匹配需要增强的被代理对象,也知道了怎么生成动态代理。 我们知道了怎么做,可是还不知道什么时候做,上述的各个节点都是什么时候触发的呢?我们知道bean的生命周期主要包括实例化 bean, 属性注入,初始化方法的调用。对一个对象增强首先要有一个对象,那么增强一定是在这个 be...原创 2021-09-12 01:02:30 · 303 阅读 · 0 评论 -
Spring AOP 第二篇-Spring 如何解析切面获取切点,通知和生成代理对象
Spring AOP 流程概述在上篇文章中,我们知道了增强被代理对象,需要一些具体增强的拦截器, 我们在使用 Spring AOP 的时候,虽然没有创建一个个拦截器,但是它底层代码会根据配置的注解,解析创建出一个拦截器出来,如标注了 @Before 注解的方法,就会创建出一个类型为 BeforeAdvice 类型的拦截器出来。然后会封装在 advisor 中。最终形成拦截器链,从而对被代理对象增强。有两个时间点可以对要创建的 bean 进行代理生成代理对象,一是在实...原创 2021-09-08 15:38:57 · 2146 阅读 · 0 评论 -
Spring AOP 第一篇-初识Spring AOP
前言 前一篇文章讲了一些关于动态代理和拦截器链的内容,Spring AOP-动态代理和拦截器。本章的内容延续上一篇文章的样例,可以先看下上篇文章。其实动态代理就是 Spring AOP 的基础,我们通过动态代理可以实现增强被代理对象的功能,但是有一个问题,那就是太麻烦了,Spring AOP 就是解决这一问题的,使得被代理对象的增强变得简单,更有利于开发使用。代码样例引入需要的依赖 <dependency> <group...原创 2021-09-06 23:08:12 · 784 阅读 · 0 评论 -
Spring-动态代理和拦截器
代理模式 简单来讲,代理模式就是在一个对象的基础上,提供另外一个代理对象,这个代理对象拥有原有对象的引用,拥有原有对象的任何功能,除此之外,还能添加一些功能上去,也就是所说的增强。 举例来说,这其实就像我们生活中的房屋中介,房东相当于原有对象,中介就是代理对象,中介止有房东的出售出租房屋的权利,他还能额外收取你一些中介费,保洁费什么的,这是原有对象房东所不具备的能力。所以说代理对象又可以说是增强的对象。 在代码世界里,代理模式有什么用呢?举例来说,比如现...原创 2021-08-29 23:27:45 · 1234 阅读 · 0 评论 -
Spring populateBean注入属性-@Value @Autowired到底怎么解析的?
一些小的知识点1:beanFactory.getAutowireCandidateResolver() 获取到的对象是什么时候注入的?private AutowireCandidateResolver autowireCandidateResolver = SimpleAutowireCandidateResolver.INSTANCE;可以看到默认是初始化了一个 SimpleAutowireCandidateResolver 的实例,但是它并没有重写getSuggestedValue...原创 2021-08-23 23:56:34 · 638 阅读 · 0 评论 -
什么是 BeanDefinition? 以及 Spring 怎么创建一个 bean
目录概念代码举例源码剖析模拟构造器反射生成对象实例概念 它是用来描述 Bean 的,里面存放着关于 Bean 的一系列信息,比如 Bean 的作用域,Bean 所对应的 class, 是否懒加载,是否 Primary 等等。有了它 Spring 容器就掌握了实例化 bean 所需要的一些重要信息,才可以对其进行实例化。代码举例 实体类代码public class User { private String name; priv...原创 2021-08-11 14:32:51 · 2533 阅读 · 1 评论 -
Bean工厂后置处理器之 ConfigurationClassPostProcessor- Spring 到底怎么扫描到它所需要管理的bean的?
什么是bean工厂后置处理器? 在 Spring 的启动过程中,在实例化 bean 之前执行,它主要用来扫描出后面需要实例化的一些 bean,并注册成 BeanDefinition。ConfigurationClassPostProcessor 什么实例什么时候被创建出来的呢? spring 项目启动的时候都会声明一个上下文,如 AnnotationConfigApplicationContext,然后给其传入一个配置类,就可以启动 spring 容器。Anno...原创 2021-08-11 00:18:53 · 1451 阅读 · 5 评论 -
@Import 注解使用及原理解析
1:@Import的使用场景:通过 @Import 注解引入普通的 Java 类数组@Import({TestA.class}):这样就会把 TestA 注入进 IOC 容器,生成一个名字为 “com.demo.testA” 的 bean,同时也可以看到可以传入多个类,这样就可以在IOC容器里生成多个 bean。通过 @Import 注解引入实现了 ImportSelector 接口的类 实现了ImportSelector接口,就必须重写 selectImports...原创 2021-08-10 23:28:19 · 6228 阅读 · 1 评论