自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 收藏
  • 关注

原创 Spring 无法解决循环依赖的 5 种场景

Component// 依赖其他BeanSpring 的循环依赖处理机制体现了框架设计的高度智慧,但作为开发者,最优雅的解决方案往往不是技术手段,而是架构设计。单一职责原则:拆分臃肿的 Bean依赖倒置原则:面向接口编程层次化设计:Controller -> Service -> Repository 的严格分层。

2025-03-07 18:58:59 1102

原创 Spring 三级缓存 vs 二级缓存:深度解析循环依赖的终极解决方案

/ Bean A 依赖 Bean B@Component@Autowired// Bean B 依赖 Bean A@Component@Autowired。

2025-03-04 20:55:13 661

原创 死锁发生的原因及如何避免

线程 A 等待线程 B 的资源,线程 B 等待线程 C 的资源,线程 C 又等待线程 A 的资源。线程 B 持有锁 Y,并尝试获取锁 X。:线程 A 持有锁 X,线程 B 必须等待线程 A 释放 X 后才能使用。:线程 A 持有锁 X,无法被系统强制剥夺锁 X 给线程 B。:线程在持有至少一个资源的同时,等待获取其他线程持有的资源。:存在一个线程等待链,每个线程都在等待下一个线程持有的资源。:对资源(如锁)进行编号,所有线程必须按编号从小到大申请。:若线程无法获取全部资源,则释放已持有的资源,稍后重试。

2025-02-25 14:05:04 667

原创 深入剖析Spring MVC

Model:封装应用程序的数据和业务逻辑。View:负责渲染数据(通常是 HTML 页面)。Controller:处理用户请求并协调 Model 和 View。

2025-02-18 20:52:33 911

原创 使用 JavaConfig 配置 Spring

JavaConfig 是 Spring 框架提供的一种基于 Java 的配置方式。它通过使用注解标记的类来替代传统的 XML 配置文件。JavaConfig 的核心思想是“约定优于配置”,通过注解和代码来定义 Bean 及其依赖关系。使用// 配置 Bean 的方法使用@Bean@Bean。

2025-02-15 09:24:11 777

原创 Spring 整合 MyBatis:核心知识点详解

在传统的Java开发中,开发者需要手动管理数据库连接、事务以及SQL语句的执行。是Spring提供的一个类,用于自动扫描MyBatis的Mapper接口,并将其注册为Spring的Bean。:Spring的IoC容器可以管理MyBatis的Mapper接口,简化了对象的创建和管理。:通过Spring的配置,可以简化MyBatis的配置过程,减少冗余代码。:Spring提供了声明式事务管理,可以轻松地管理数据库事务。,并指定MyBatis的Mapper文件位置。在Spring的配置文件中,配置数据源。

2025-02-10 19:48:43 484

原创 Spring MVC

Spring MVC是一个基于MVC设计模式的Web框架,用于构建灵活、可扩展的Web应用。它通过DispatcherServlet处理请求,并将请求分发给相应的控制器进行处理。

2025-02-07 09:56:17 539

原创 Spring 事务管理

事务管理是确保一系列操作要么全部成功,要么全部失败的机制。在数据库操作中,事务管理可以确保数据的一致性和完整性。

2025-02-07 09:05:40 668

原创 Spring AOP

AOP(Aspect-Oriented Programming)是一种编程范式,旨在将横切关注点从核心业务逻辑中分离出来。通过AOP,开发者可以将日志、事务管理、安全性等通用功能模块化,从而提高代码的可维护性和可重用性。

2025-02-07 08:50:53 556

原创 深入理解Spring框架的核心概念与使用

Spring是一个轻量级的开源框架,旨在简化Java企业级应用的开发。它通过提供一系列模块,如Spring Core、Spring AOP、Spring MVC等,帮助开发者构建灵活、可扩展的应用。

2025-02-04 15:15:53 355

原创 Spring 实现注入的方式

如果没有匹配, 则回退为一个原始类型进行匹配,如果匹配则自动装配。①如果同时指定了 name 和 type,则从 Spring 上下文中找到唯一匹配的 bean 进行装配,找不到则抛 出异常。③如果指定了 type,则从上下文中找到类似匹配的唯一 bean 进行装配,找不到或是找到多个,都会 抛出异常。②如果指定了 name ,则从上下文中查找名称(id)匹配的 bean 进行装配,找不到则抛出异常。:默认按照 Bean 的名称进行注入,如果名称相同则可以选择使用。注解指定具体的 Bean 名称进行注入。

2025-02-04 14:45:01 764

原创 如何在MyBatis中优化SQL

MyBatis 是一款流行的 Java 持久层框架,它简化了数据库操作,并且能够灵活地映射 Java 对象与数据库表之间的关系。在使用 MyBatis 进行数据库操作时,SQL 性能优化是至关重要的,特别是在面对复杂查询、大规模数据处理或高并发场景时。

2025-01-13 20:58:40 692

原创 Java反射机制

Java反射(Reflection)是一种机制,它允许程序在运行时加载、探测和操作类、方法、构造函数等信息。通过反射,Java程序能够动态地获取类的详细信息,并能在运行时实例化对象、调用方法、访问字段等,而不需要在编译时就知道具体的类、方法或字段。反射机制为Java提供了极大的灵活性,常用于一些框架或库中,如Spring、Hibernate等,它们通过反射来实现依赖注入、动态代理等功能。

2025-01-06 20:43:54 1023

原创 设计模式中的代理模式

动态代理允许我们在运行时创建代理对象,而不需要为每一个委托类都编写一个具体的代理类。这提供了更高的灵活性和可扩展性。Java中的动态代理主要分为两种:基于接口的代理和基于子类的代理。在Java中,代理模式(Proxy Pattern)可以通过静态代理和动态代理两种主要方式实现。使用CGLIB需要引入相应的依赖(如Maven依赖)。2. CGLIB 动态代理。1. JDK动态代理。

2025-01-04 09:36:24 1036

原创 代理模式和适配器模式有什么区别

代理对象与目标对象通常有相同的接口,因此可以在客户端不感知的情况下替代目标对象。适配器通过将一个接口转换成客户端所期望的接口,从而使得不兼容的类能够一起工作。代理模式(Proxy Pattern)和适配器模式(Adapter Pattern)是两种结构型设计模式,它们看似相似,但在设计意图、使用场景以及功能上有一些显著的区别。:远程代理(如在分布式系统中,代理类用于远程调用目标对象)或虚拟代理(用于延迟加载某些计算量大或数据量大的对象)。:将旧的接口适配到新的接口,或者将一个类的接口适配为另一个类的接口。

2025-01-03 15:22:03 957

原创 静态代理与动态代理区别

由于代理类在编译时就已经确定,一旦需要增加新的代理逻辑或者修改代理行为,通常需要手动修改代理类。:静态代理是在编译时就确定了代理类的实现,通常通过手动编写代理类或者由工具在编译期生成。:适用于需要根据不同的需求生成不同的代理类,或者代理的类的数量较大,且不可能在编译时知道具体的代理类的场景。静态代理需要提前确定好所有代理的类,因此比较适合代理逻辑相对简单,且代理类不需要太多变化的场景。:如果有多个接口或多个实现类需要代理,则每个接口或实现类都需要创建一个对应的代理类,可能会导致大量的代码重复。

2025-01-02 08:28:00 1014

原创 设计模式的六大原则

一个类应该只有一个引起它变化的原因。

2024-12-30 16:48:39 708

原创 设计模式-单例模式

懒汉式:延迟加载,线程安全性差(需要双重检查锁定)。饿汉式:类加载时立即创建实例,线程安全,但浪费资源(如果实例不常用)。静态内部类:延迟加载,线程安全,不存在性能问题,推荐使用。枚举式:最安全、最简洁,JVM 保证唯一性,适合用于单例模式。通常推荐使用 静态内部类 或 枚举式,它们具有较高的性能并能避免常见的错误。

2024-12-28 22:05:58 727

原创 设计模式的分类及作用

设计模式(Design Patterns)是软件开发中一种经过验证的、可重用的解决方案,用来解决在特定场景下的常见问题。设计模式可以帮助程序员在面对复杂问题时,通过已经被验证过的方式来设计系统,使得代码更加清晰、可维护、可扩展。和,每一类包含不同的模式。

2024-12-27 15:16:39 1428

原创 Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么

执行器主要特点适用场景每次执行都创建新的Statement,没有缓存适合单次执行、简单查询或低频次操作。缓存,复用执行过的 SQL适合有重复查询的场景,减少 SQL 解析开销。批量执行 SQL,减少与数据库的交互次数适合批量插入、批量更新、批量删除等大量数据处理操作。适用于简单的单次 SQL 执行。适用于重复执行的 SQL,能有效复用。适用于需要执行大量 SQL 的批量操作,能显著提高性能。在 MyBatis 的配置中,你可以根据应用场景选择不同的Executor。

2024-12-26 08:27:18 1061

原创 MyBatis中动态SQL执行原理

XML 配置解析:MyBatis 读取映射文件中的动态 SQL 标签(如<if><choose><foreach>等)并解析它们。条件判断:在执行时,MyBatis 根据传入的参数判断哪些 SQL 标签的条件满足,并决定是否将相关的 SQL 片段包含在最终的 SQL 中。生成 SQL:根据条件判断结果,MyBatis 动态生成 SQL 查询语句。参数绑定:MyBatis 将查询方法的参数绑定到 SQL 中的占位符。执行 SQL:最终生成的 SQL 被执行,结果返回给调用者。

2024-12-25 18:00:46 1271

原创 MyBatis 的一级缓存和二级缓存

一级缓存是SqlSession级别的缓存,也叫做本地缓存。它默认开启,并且是 MyBatis 的默认缓存机制。在一次数据库会话(SqlSession)中,MyBatis 会将查询到的结果缓存到一级缓存中。如果相同的 SQL 被多次执行(在同一个SqlSession中),MyBatis 会从缓存中读取数据,而不去数据库中查询,这样可以减少数据库的访问。二级缓存是级别的缓存,也叫做全局缓存。它在 MyBatis 的多个SqlSession之间共享缓存数据。换句话说,二级缓存的数据是跨SqlSession。

2024-12-24 14:00:45 1127

原创 MyBatis 中常用标签

在 MyBatis 中,常用标签是进行 SQL 映射和处理数据库操作的核心。MyBatis 通过 XML 配置文件或者注解来映射 SQL 语句和 Java 对象之间的关系。以下是 MyBatis 中常用的标签,主要包括等,这些标签是 MyBatis 进行数据库操作的基础。

2024-12-23 16:50:28 1297

原创 Mybatis 如何实现一对一、一对多的关联查询

在 MyBatis 中实现一对一和一对多的关联查询可以通过多种方式来完成,主要包括和。每种方式都有其特点和适用场景。

2024-12-21 08:34:29 921

原创 MyBatisz中接口绑定实现方式

在 MyBatis 中,接口绑定(也称为 Mapper 接口)是将 SQL 语句与 Java 方法关联起来的一种方式。它允许开发者定义一个接口,并通过 MyBatis 自动将其方法映射到相应的 SQL 操作上。和Sql语句比较简单时,使用注解进行绑定;当Sql语句比较复杂时,使用xml进行绑定。

2024-12-20 15:20:27 1042

原创 MyBatis 的优缺点

MyBatis 在灵活性、可控性和性能方面表现出色,特别是在需要精细控制 SQL 和优化查询性能的应用场景中。然而,在自动化程度、快速开发和支持复杂的对象关系映射方面,它可能不如一些全功能的 ORM 框架。因此,选择 MyBatis 还是其他 ORM 框架取决于具体项目的特性和团队的技术栈。对于那些需要高性能、细粒度控制以及有经验的 SQL 开发者来说,MyBatis 是一个很好的选择。

2024-12-19 08:31:41 1141

原创 MyBatis

MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects)映射成数据库中的记录。

2024-12-18 20:25:39 1091

原创 $route 和$router 的区别

在 Vue.js 中, 和 是 Vue Router 提供的两个非常重要的对象,它们用于管理和操作路由。定义: 是一个响应式的对象,它包含了当前激活路由的所有信息,例如路径、参数、查询字符串等。你可以把它看作是“当前路由快照”。常见属性: 的用途 读取路由信息:你可以使用 来访问当前路由的各种信息,如路径 ()、参数 ()、查询字符串 () 等等。动态组件渲染:根据 中的数据(比如 或 ),可以实现动态加载不同的组件或内容。导航守卫:虽然 本身不直接用于导航控制,但它可

2024-12-17 13:56:37 879

原创 Vue 的响应式原理

在 Vue 2.x 中,Vue 使用来拦截对象属性的getter和setter。每当一个 Vue 实例被创建时,它会遍历所有传入的数据对象的属性,并将它们转换为 getter 和 setter。

2024-12-16 21:03:14 1204

原创 vuex 作用及五大组成部分

Vuex 是 Vue.js 的官方状态管理库,旨在帮助开发者构建大型应用时更好地管理和共享全局状态。它提供了一种集中式存储和管理应用所有组件的状态的方式,并且遵循单一状态树的原则。通过 Vuex,可以更容易地实现状态的可预测性和调试。

2024-12-14 19:36:50 813

原创 路由传值方式

路由传值在Web开发中是实现页面间或组件间数据传递的重要机制。

2024-12-13 20:20:41 1299

原创 Vue中常见指令

在Vue.js中,指令(Directives)是带有v-前缀的特殊属性,用于在HTML元素上添加特殊的Vue行为。它们可以用来绑定数据、监听事件、控制条件渲染等。

2024-12-12 10:25:37 476

原创 vue 组件之间的传值方式

父组件可以使用 props将数据传递给子组件。

2024-12-11 18:35:03 742

原创 vue-生命周期

Vue 的生命周期是指 Vue 实例从创建到销毁期间经历的一系列阶段。每个阶段都有相应的钩子函数(Lifecycle Hooks),允许开发者在这些关键时刻执行自定义逻辑。

2024-12-10 15:15:27 796

原创 MVVM和MVC

MVVM优点:简化UI编码、更好的解耦、增强的测试性MVC优点:职责分离、灵活性、复用性强

2024-12-09 21:29:13 1179

原创 http 和 https 的区别?

HTTP (HyperText Transfer Protocol) 和 HTTPS (HyperText Transfer Protocol Secure) 是两种用于在 Web 浏览器和网站服务器之间传输网页的协议,它们的主要区别在于安全性。

2024-12-06 20:12:26 3218

原创 HTTP状态码

HTTP 状态码是服务器在响应客户端请求时返回的一个数字代码,它用于表示请求的处理结果。状态码是一个三位数,根据其分类可以分为五类,每类由第一位数字标识,并且通常伴随着一个简短的英文短语来帮助理解其含义。

2024-12-05 21:18:42 545

原创 TCP的建立连接与关闭连接

三次握手:确保了双方都能正确初始化序列号,并且保证双方都知道对方已准备好通信。四次挥手:因为TCP连接是双向的,所以每个方向都需要单独关闭。TIME_WAIT状态的存在是为了处理可能在网络中延迟到达的重复报文,确保旧连接的数据不会影响新连接。此外,它还有助于解决网络分组重组的问题。

2024-12-04 18:48:58 892

原创 什么是 Socket?

Socket(套接字)是计算机网络编程中的一个重要概念,它用于在不同计算机之间进行通信。Socket 提供了一种机制,使得应用程序可以通过网络发送和接收数据。Socket 通信通常基于 TCP/IP 协议,但也可以使用其他协议,如 UDP。

2024-12-03 19:58:06 585

原创 TCP/IP 和 UDP

TCP/IP 是一个包含多个协议的框架,用于互联网的数据传输,其中TCP和UDP是传输层最重要的两个协议。TCP提供了一种可靠的、面向连接的服务,适用于需要确保数据完整性和顺序性的应用;UDP提供了一种快速的、无连接的服务,适用于需要降低延迟和减少开销的应用。

2024-12-02 20:50:37 1663

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除