- 博客(14)
- 收藏
- 关注
原创 【Spring】深入Spring事务源码-@Transactional实现
本文深入解析了Spring事务管理机制的核心实现原理。首先介绍了@Transactional注解的底层实现基于SpringAOP,并通过@EnableTransactionManagement注解启用事务功能,其通过TransactionManagementConfigurationSelector自动配置了AutoProxyRegistrar和ProxyTransactionManagementConfiguration两个关键组件。帮助开发者深入理解Spring事务的底层机制。
2025-06-16 19:05:31
902
1
原创 【Spring】深入浅出SpringAOP
本文介绍了Spring AOP的实现原理和核心组件。主要内容包括:1)Spring AOP基于JDK动态代理和Cglib动态代理两种技术实现,并提供了示例代码;2)Spring封装了ProxyFactory作为统一代理创建工具,简化了使用过程;3)详细讲解了ProxyFactory的核心概念,包括Pointcut(切入点)用来定义代理范围、Advisor(由Advice和Pointcut组成)作为代理逻辑的封装;4)分析了ProxyFactory的代理策略选择规则,主要依据目标类是否实现接口来决定使用JDK
2025-05-27 17:21:41
711
1
原创 【Spring】Spring Bean生命周期
扫描,例如:处理`@ComponentScan配置类时,构建了一个ClassPathBeanDefinitionScanner扫描指定的路径,将扫描到的符合条件的类加载为BeanDefinition。
2025-04-10 20:08:08
293
原创 【Spring】Spring容器启动流程-源码剖析
通过AnnotationConfigApplicationContext的方式来启动Spring容器,这个启动流程具体做了哪些事?
2025-04-10 17:32:21
1085
原创 【Spring-Mybatis】SpringBoot中Mybatis自动装配流程
继承了,主要功能也跟ClassPathBeanDefinitionScanner类似(如果不太清楚可以看【Spring扫描类过程】@ComponentScan注解的实现),该类重写了doScan方法,在调用了父类的doScan方法后,做了额外处理} else {此处,将扫描出的BeanDefinition的BeanClass全部设置为意为:举例UserMapper会被MapperFactoryBean的getObject方法生产出来,对FactoryBean不了解的可以看// 省略……
2024-10-21 11:31:20
1441
原创 【Spring扫描类过程】@ComponentScan注解的实现
众所周知,要启动一个SpringBoot应用程序,只需要(案例来自SpringBoot官网)或者,省略路径,如果省略的话,则默认取值启动类所在路径;那么,Spring是如何对路径做处理并扫描呢?实际上,Spring会对ComponentScan注解做处理来控制扫描的范围。我们点开注解,可以看到scanBasePackages属性被映射到@ComponentScan中的basePackages属性上。
2024-10-08 17:20:17
793
原创 项目中接入traceId跟踪请求全流程日志
不知道现在还有多少小伙伴在通过日志查问题时,还是通过肉眼观察的?通过引入traceId可以很方便的一次性查找一个链路的所有日志,可以理解为:为每个请求生成了一个唯一id。
2024-09-25 16:30:02
706
原创 Mybatis执行流程源码分析
那么,这一段代码是Mybatis是如何执行,如何获取到SqlSessionFactory,如何获取到Mapper,又是如何执行Sql呢?方法依次对xml中的各节点进行解析,实质是将各个节点的信息解析成对应的配置类,全都放到Configuration类中(存放所有配置信息)
2024-09-23 15:41:57
1541
原创 【踩坑】File.mkdirs可能返回false
排查后发现,是mkdirs方法创建文件夹失败了,创建失败时不会有异常抛出,只是会返回false。这段代码在本地和测试环境调试都没有问题,但是上到生产后直接报错了,在写入文件时报了文件不存在。我遇到的情况就是权限不足,程序的启动用户并没有该文件夹的写权限,需要注意的是。当创建文件夹失败时,抛出异常,给到前端提示。
2024-09-09 15:17:58
803
原创 【Spring-RabbitMq】设置消费重试次数
在我们实际项目中需要对消息消费的高可用做保证,首先需要做到的就是消息的重试机制,设想一下以下场景:当库存服务处理上游服务发过来的订单消息时,此时服务宕机了,或者网络不可用了,那我这个消息是应该算消费成功还是消费失败呢?显然,我们肯定要对处理不成功的消息进行重试,那么如果消费不成功的话,就要无限次数的重试吗?答案是否,因为当代码逻辑有Bug或者上游的消息内容是错误的时候,无论再重试多少次也不会成功,此时应该将消息抛弃掉。所以消费的最佳实践那么该如何实现这个功能呢?。
2024-08-10 17:53:00
1554
原创 Spring-RabbitMq配置一个消费端接入多个vhost
CachingConnectionFactory的作用是管理消费端与mq建立的连接,我们上面说的containerFacory也是基于此的基础来实现的。我们要连接不同账号的VHost,那么就需要设置不同的CachingConnectionFactory。如下,往容器中分别注入B系统和C系统的CachingConnectionFactory,我们分别针对A系统和B系统单独设置了VHost,address,账号,密码参数。/*** rabbitMQ配置*/@Slf4j@Autowired。
2024-08-10 17:13:12
947
原创 JPA Hibernate直接执行sql 转换成dto AliasToEntityMapResultTransformer
find方法视图强烈不推荐这种方式用的比较多,当查询比较复杂的情况时,例如连表查询,此时注入EntityManager,通过EntityManager执行sql,返回的是List类型,手动转成dto这种方法简直是原始人,需要处理Object数组,容易数组下标越界不说,还有大量类型转换的代码,一不小心就空指针。强烈不推荐。
2024-08-07 21:08:36
1249
原创 基于EasyExcel实现导入数据校验,生成错误信息Excel
该项目设计了一个基于EasyExcel的通用导入框架,主要解决Excel导入时的数据校验问题。框架通过注解@ExcelCheck实现字段级校验(非空、重复、长度),结合自定义监听器CheckImportListener在数据映射前后进行校验。当数据不符合要求时,能生成详细错误报告(包含行号和错误信息)返回给用户,避免直接报错。该方案将校验逻辑与业务代码解耦,支持手动添加业务校验错误,并保持与EasyExcel的无缝集成。典型应用场景包括海关报关单等大量文件导入业务,有效提升数据校验效率和用户体验。
2024-07-30 17:33:09
4877
14
原创 Spring - FactoryBean
尝试从缓存中取对象(思考一下也比较合理,因为factoryBean同样可以被定义为单例,自然应该有对应的缓存池),当我们首次获取时是没有值的,所以继续往下走。先判断了beanName是否是以&开头,如果是以&开头,直接将前面从对象池中获取到的Bean返回,所以直接从此返回了FactoryBean对象。可以看到,成功创建了User对象,并从容器中可以根据BeanFactory的名称获取到生产的Bean。这与我们一般getBean的结果不太一样,一般我们根据beanName获取到的是Bean本身,让我们接。
2024-07-29 23:09:17
573
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人