
Spring
文章平均质量分 93
我神级欧文
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一次性理清Environment体系
在Spring中,我们可以通过配置文件等方式去进行一些属性值的配置,比如通过@Value注解去获取到对应的属性值,又或者说是想在程序运行时获取系统环境变量,类似的这些操作其实都是去获取一些配置数据,所以在Spring中对这些数据的提供了一个Environment组件,该组件放着的就是这些属性值,并且提供了相应的API给用户去获取,接下来我们就去看一下整个 Environment的结构体系是怎样的原创 2024-10-17 14:31:04 · 626 阅读 · 0 评论 -
深入了解Spring重试组件spring-retry
在我们的项目中,为了提高程序的健壮性,很多时候都需要有重试机制进行兜底,最多就场景就比如调用远程的服务,调用中间件服务等,因为网络是不稳定的,所以在进行远程调用的时候偶尔会产生超时的异常,所以一般来说我们都会通过手动去写一些重试的代码去进行兜底,而这些重试的代码其实都是模板化的,因此Spring实现了自己的重试机制组件spring-retry,下面我们就一起来学习一下spring-retry这个组件吧。原创 2024-10-16 15:56:08 · 1618 阅读 · 0 评论 -
Spring事务Transaction rolled back because it has been marked as rollback-only异常是怎样回事?
在平时使用spring事务去开发的时候,可能我们会碰到如下图的一个异常:这个异常是怎么回事?下面就让我们来探究一番当我们两个事务的事务传播级别都是PROPAGATION_REQUIRED的时候,如果嵌套事务发生了异常但是被上层调用方catch掉了异常,也就是说如果上面的OrderService抛出了异常,但是被UserService进行了catch,这时候就会抛出Transaction rolled back because it has been marked as rollback-only,抛出的异常原创 2024-06-02 17:21:11 · 1498 阅读 · 0 评论 -
理清Spring事务的核心关键类
在spring事务源码的内部,会有几个比较核心关键的类,虽然这基本上都是源码内部才使用到的类,但是有时候我们要对其做一些改造的时候免不了要去使用到这些类,并且这些类在spring事务内部都是起到关键的作用,对了解spring事务源码的帮助比较大,所以下面我们重点就来理解下这些关键类。原创 2023-09-16 17:31:22 · 308 阅读 · 0 评论 -
为何加上@Configuration注解的类会生成cglib代理?
为何加上@Configuration注解的类会生成cglib代理?原创 2022-07-07 18:54:17 · 1869 阅读 · 1 评论 -
深入理解Spring的BeanDefinition体系
深入理解Spring的BeanDefinition体系原创 2022-07-07 18:28:26 · 666 阅读 · 0 评论 -
Spring是如何解决循坏依赖的?
什么是循环依赖?举一个例子,所谓的循环依赖就是现在有一个A类和一个B类,A里面属性注入了B,也就是依赖了B,B里面也依赖了A,那么这就是循环依赖了,而我们要探究的是spring是怎么在实例化A并且初始化的时候注入B,然后实例化B并且初始化的时候又是怎么能够注入到A这个过程。我们先来看getBean这个方法,因为这个方法里面实现了一个Bean实例化到初始化最终变成一个完整的bean的过程org.springframework.beans.factory.support.AbstractBeanFa.原创 2022-01-27 16:54:11 · 714 阅读 · 3 评论 -
深入了解Spring的@Scope注解中作用域代理proxyMode属性的实现
一.问题引入代码如下:@RestControllerpublic class ConfigController { @Autowired private TestService testService; @GetMapping("/testPrototype") public String testPrototype() { System.out.println(testService); return testService.原创 2022-01-04 18:28:26 · 4443 阅读 · 2 评论 -
Spring缓存切面源码解析
@EnableCaching这个注解的作用就是开启缓存,使得加在方法上面的缓存注解生效,我们看下这个注解是做了什么@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(CachingConfigurationSelector.class)public @interface EnableCaching { boolean proxyTargetClass() default fal原创 2021-07-17 21:07:30 · 467 阅读 · 1 评论 -
SpringAOP之@EnableAspectJAutoProxy注解如何实现自动代理?
前面我们主要说了关于SpringAOP底层的API,这篇文章就来说说这些底层的API与SpringIOC容器的结合是如何实现对象的自动代理的@EnableAspectJAutoProxy通常我们在一个spring项目中要使用SpringAOP的功能的时候,除了要加上AOP和AspectJ的依赖,还要在配置类上面加上@EnableAspectJAutoProxy注解,该注解的作用就是开启SpringAOP的自动代理功能,下面我们来看这个注解的作用@EnableAspectJAutoProxy..原创 2021-07-15 19:28:47 · 3129 阅读 · 1 评论 -
Spring事务如何基于SpringAOP来实现事务代理?
通常我们要开启spring的事务我们需要加上@EnableTransactionManagement这个注解,那么肯定的这个注解的作用就是往容器里面去import了一个组件从而使得方法上面的@Transaction注解生效,而且spring事务的原理也是基于代理去实现事务回滚,事务隔离等功能的,那么既然是基于代理的原理,spring的事务与springAOP在实现这方面上有何异曲同工之处呢?首先来看看@EnableTransactionManagement这个注解做了什么事@Override.原创 2021-07-15 19:11:43 · 1520 阅读 · 2 评论 -
SpringAOP底层API之代理对象执行流程
我们之前说到了在对目标对象创建代理对象之前,如果我们使用是基于AspecJ模式的AspectJProxyFactory的代理工厂,那么spring会先解析aspect切面类,然后根据pointcut去判断并过滤出适用于目标对象的advisor,并把这些过滤出来的advisor形成一条调用链,目的是当我们的目标对象执行目标方法的时候对其进行拦截达到增强的作用,那么下面我们就来看一下spring通过advisor调用链对目标方法执行的时候去进行拦截的执行流程这里讨论的是关于JDK的动态代理执行过程,所以.原创 2021-07-15 19:02:17 · 287 阅读 · 1 评论 -
Spring异步切面源码解析
spring中提供了一种异步调用的方式去让我们在方法的调用过程中来达到异步调用的结果,比如service1的a方法调用了service2的b方法,正常使用的话是a同步调用b的,但是如果我们想a异步调用b的话,也就是说可能b方法调用耗时比较长,a方法不想阻塞在b方法上面,而是b方法开启一个线程去异步调用,这时我们只需要开启spring提供的异步切面就可以简单地达到我们想要的异步调用的效果了一.异步切面使用添加@EnableAsync开启spring异步切面@EnableAsync@Comp.原创 2021-07-05 09:52:43 · 824 阅读 · 0 评论 -
探索Spring异步代理循环依赖失败的问题
spring对于循环依赖在内部已经有解决方案了,比较经典的就是去解决代理对象的循环依赖问题,但是spring并不能完全能够对各种代理场景都能够保证循环依赖,比如异步代理的循环依赖就会报错,我们下面先来演示一下报错复原@Componentpublic class A implements C { @Autowired private D d; @Async @Override public void a() { }}@Comp..原创 2021-07-05 09:37:05 · 1173 阅读 · 3 评论 -
Spring依赖注入@Autowired原理解析(一)之寻找需要注入的属性
首先说明一下,@Autowired这个注解与所谓的自动注入模式并没关系,如果你觉得有关系,那可能是从效果上来说它是实现了自动注入这个模式的效果(自动注入相对手动注入的区别就是不用手动地去配置bean之间的依赖注入关系,这点在xml配置中能够体现出来),但是从源码角度来看说@Autowired是自动注入的这是不可取的,因为通过debug我们可以发现使用了@Autowired注解的类它的注入模式是no(spring中有4种注入模式,分别为no,byName,byType,constructor,其中no为手动.原创 2020-10-16 14:38:32 · 1338 阅读 · 0 评论 -
Spring与MyBatis整合源码分析
Spring与MyBatis整合原理先来说说我们通常使用在Spring环境中使用MyBatis的步骤:加上mybatis-spring的maven坐标 在启动类上加@MapperScan注解,在注解中标明你要扫描的mapper的包路径 在service上使用spring的@Autowired注解把想要的mapper注入进service中可能大家一直觉得挺神奇的一点就是,在我们不在spring环境中单独使用MyBatis的时候,mapper对象是我们手动去通过调用sqlsession.g.原创 2020-10-02 17:47:53 · 2275 阅读 · 2 评论 -
SpringAOP原理解析
Spring中主要有两大核心模块,其中一个就是AOP(切面编程)。通常我们使用SpringAOP注解版的时候都是定义一个切面类,里面定义好切入点,然后对定义好的切入点可以进行@Before前置通知处理,@After后置通知处理,@AfterReturning返回通知处理,@AfterThrowing异常通知处理,@Around环绕通知处理,最后在配置类上面(或者通常我们在SpringBoot中的...原创 2019-09-29 16:09:16 · 379 阅读 · 0 评论