- 博客(20)
- 收藏
- 关注
原创 @Autowired 的五种注入方式
即使容器中没有找到对应的 Bean,程序也不会报错,Setter 方法将不会被调用。出你的对象并手动传入 Mock 依赖,必须借助反射或者启动 Spring 容器。中(例如在 JUnit 5 的扩展中注入依赖),但在业务代码中应避免作为首选。同样,依赖可以在运行时被反复修改,不适用于需要保证依赖不变的核心组件。类的依赖关系被隐藏在私有字段中,而不是清晰地体现在构造函数签名中。在不希望将依赖作为成员变量存储,而只在方法执行时临时需要时使用。机制,在对象实例化之后,将对应的依赖注入到该字段中。
2025-10-06 19:35:55
899
原创 什么是后处理器?
在Spring框架中,后处理器是一种允许您在Spring容器完成Bean的实例化、依赖注入、初始化等步骤之后或之前,对这些Bean实例进行自定义修改或增强的机制。它们是Spring提供的扩展点,用于在Bean的生命周期的特定阶段插入您的自定义逻辑。:这是最常用的一种,用于影响Bean实例的创建过程。:用于影响Bean定义的元数据,而不是Bean实例本身。它在Bean实例尚未创建之前执行。实现注解驱动功能:如@Autowired等注解的解析和执行都是通过相应的后处理器完成的。AOP代理:用于实现。
2025-10-06 19:03:40
515
原创 BeanFactory vs FactoryBean,它们到底有何不同?
是 Spring IoC 容器的顶级接口,是 Spring 容器的最核心、最基础的实现。简单来说,它就是管理Bean的“工厂”。它负责 Bean 的定义创建管理装配和生命周期控制。它采用**延迟加载(Lazy Loading)**机制。这意味着,只有当你真正调用getBean()方法时,它才会去创建对应的 Bean 实例。我们日常使用的 ApplicationContext(例如)就是 BeanFactory的子接口,它在的基础上增加了更多企业级特性,例如国际化、事件发布、AOP 等。
2025-10-06 18:37:00
256
原创 Mybatis-Plus的Mapper,Service
和。虽然它们都与数据库操作相关,但在 Spring/Spring Boot 的分层架构中,它们的却有着本质的区别。
2025-10-02 19:38:08
304
原创 从创建一个MinioCilent理解@Configuration注解
Bean对于我们无法添加@Component或@Service注解的第三方类(如),提供了通过@Bean方法来创建和定制实例的能力。它允许我们使用 Java 代码灵活地进行复杂的初始化逻辑(如 builder 模式、复杂的条件判断),将配置代码与业务代码彻底分开。我们通过@Bean方法精确地告诉 Spring 如何调用来构造这个 Bean。
2025-10-02 08:38:30
525
原创 MyBatis-Plus自定义sql
本实例的目标是实现一个联表查询,将attr_key和attr_value两张表的数据组合成一个 AttrKeyVo对象列表返回。AttrKeyVo实体类代码实体如下@Data@Schema(description = "属性value列表")在 AttrKeyService接口中声明自定义的业务方法。/*** 【自定义方法】查询全部属性名称和属性值列表,返回 AttrKeyVo 联表对象*/在 AttrKeyMapper。
2025-10-01 18:50:35
658
原创 Mybatis与Mybatis-Plus
在这些自定义 XML 中,MP 的通用能力(如分页、逻辑删除)仍然生效,开发者只需要关注 SQL 语句的业务逻辑部分。
2025-09-29 17:14:31
759
原创 HTTP Request 方法分类
获取数据?始终使用GET。新增资源?始终使用POST。全量修改(替换)资源?使用PUT。部分修改(打补丁)资源?使用PATCH。删除资源?使用DELETE。正确使用这些方法不仅能遵循 Web 规范,还能让 API 具有更好的可读性、缓存性和健壮性。
2025-09-29 09:34:36
689
原创 从案例入手了解Java异常
在 IntelliJ IDEA 中,这段代码立即标红,并弹出了一个长长的异常列表提示,如下图所示。为了彻底理解为什么编译器要“强迫”我们处理某些异常,我们需要掌握 Java 异常的分类体系。在 Java 中,所有可抛出的问题都继承自 java.lang.Throwable。通过强制处理这些异常,Java 确保了您在编写涉及外部通信的代码时,你必须告诉编译器,如果这些外部问题发生了,程序应该怎么做。这些操作本质上是不可控的外部环境操作,因此它们抛出的是。的异常,它们通常是程序逻辑错误,编译器不强制处理。
2025-09-28 14:42:31
993
原创 springboot的boot作何解释
在传统的 Spring 开发中,开发者需要手动编写大量的 XML 或 Java 配置来“引导”框架:配置数据源、配置事务管理器、配置 DispatcherServlet 等等。这被称为“样板代码”。Spring Boot 设定了许多合理的默认值。的精髓在于它接管了传统 Spring 框架中最复杂、最耗时的。,让开发者可以直接聚焦于业务逻辑,而非系统的“引导”流程。注解,就能启动整个应用,就像是操作系统内核被。于我们可以使用引导加载程序来类比。在 Spring Boot 中,最终,你只需要一个简单的。
2025-09-28 08:08:49
356
原创 @SpringBootTest 和 @Test注解在springboot项目中的异同
在 Spring Boot 项目中,和@Test扮演着非常不同的角色,它们分别用于定义。@Test:是 JUnit 框架提供的,。:是 Spring Boot 提供的,它告诉 Spring。
2025-09-28 01:49:22
652
原创 Wget Rpm Yum之间的关联
安装这个包后,您的系统就能知道去哪里下载 MySQL 的所有组件。现在您的系统已经知道 MySQL 的软件仓库在哪里了。总结:当您使用 YUM 时,YUM 会负责处理所有依赖关系和下载,了最复杂的环节——MySQL 服务器本体及其几十个依赖包的安装。下载官方提供的 RPM 仓库配置文件,然后使用 rpm。包管理器,目的是解决 RPM 的主要痛点。的软件包文件格式和管理工具,而。是一个建立在 RPM 之上的。来执行实际的文件安装操作。的关系,并以实际安装。三者之间的执行顺序。的文件(仓库配置)。
2025-09-27 23:09:15
662
原创 @RestController和@Controller注解异同
如果你正在开发一个或一个微服务,你的任务只是向前端提供JSON/XML 数据,那么应该使用 @RestController。如果你正在开发一个传统的Web 应用,需要返回HTML 模板页面(例如使用 Thymeleaf 或 JSP),那么应该使用 @Controller。如果你在某些方法中偶尔需要返回 JSON 数据,则在这些方法上单独加上 @ResponseBody。
2025-09-27 07:56:31
788
原创 Mysql和Redis如何保存双写一致性(缓存延迟双删)(一次修改数据多次读)
在第二步修改数据库里面的数据的时候没有做完的时候接入了线程2,此时redis里面的数据已经被删除了,请求2接入,它找不到数据,就要从数据库中带出老数据进入缓存里面吗, 获取到的是老数据,此时数据库里面的也是老数据,然后请求1执行完毕了,此时数据库里面的已经是新数据了,数据不一致已经出现了,并且请求3-n直接在redis缓存里面查数据的时候出现了问题,数据一直是老数据。思考:本文探讨的是一次写多次读,多次写有没有可能也有一致性冲突,这个问题可能也不存在,我没有细想啊,只是提出一下这个问题。
2025-09-07 21:53:14
775
原创 Redis缓存穿透,缓存击穿,缓存雪崩的思考和辨析
(缓存穿透这个问题不强调单一时间尺度数据传来过量请求导致数据库难以处理这些“同时”传过来的请求,强调的是到数据不走基于内存的缓存而是走数据库本身这个行为和redis期望结果不一致,强调的是绕过缓存的无效查询对数据库的持续压力)首先这三个问题都是由缓存未命中这个状态引发的,缓存穿透这个问题指的是由于查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的key每次请求都要到数据库去查询,进而给数据库带来压力。简单的来说是串行的穿透数据库的单个值。
2025-09-07 09:37:31
712
原创 如果隔离级别是串行化,那么还需要undo log日志吗?
但是我后来发现有可能违反原子性法则,串行化隔离级别下的事务中如果有主动回滚操作(实际应用中不太可能出现)或者事务出现执行错误的情况,还是要实现回滚操作,而回滚操作就要通过undo log来实现。即使在串行化级别下,一个事务可能执行了10条UPDATE语句,在第11条语句时失败了。我当时是这么想的,既然串行化就相当于一条一条sql语句执行的话,一致性已经是非常强了,那是不是根本不需要保证事务的一致性?从这个角度看undo log第一原则是保证事务的原子性,而实现mvcc只是在其基础上实现的一个强大的副产品。
2025-09-06 16:46:57
173
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅