自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring 之 Lifecycle 及 SmartLifecycle

关于Lifecycle,网络平台给出的解释是这样的:它是Spring框架中的一个基础接口,用于简化管理有状态的组件(譬如连接池、定时任务等)的初始化、启动、停止等生命周期过程。

2024-06-03 22:34:34 1347 6

原创 SpringBoot自动装配(二)

​前篇(《SpringBoot自动装配(一)》)言至自动装配之入口及过程。虽小有所得,但终是狂妄自大,思虑不周,遗问颇多,譬如:千万自配者,何以滤之?还有上篇文章想当然的认为DeferredImportSelector接口的实现类AutoConfigurationImportSelector中的selectImports()方法是在ConfigurationClassParser#processImports()方法中,实则不然。

2024-05-14 22:03:50 978 1

原创 SpringBoot自动装配(一)

在Spring中@Import注解的作用是用来导入额外的配置类或者组件类,以扩展当前上下文中的Bean定义集合。这意味着当我们在一个配置类上使用@Import注解时,Spring容器会在初始化过程中处理被导入的类,并依据类的不同特性执行不同的操作

2024-04-14 21:44:29 739

原创 初识Spring Cloud

Spring Cloud是一个针对微服务架构设计的标准化一站式开发框架,它通过整合和封装各种成熟的第三方库和服务,为开发者提供了一整套开箱即用的微服务开发工具及最佳实践,使得在搭建和管理分布式系统时能更高效、更便捷,从而更好地应对云计算环境下的服务治理挑战

2024-04-02 22:24:01 1002 1

原创 番外篇——Idea安装通义灵码插件

idea安装通义灵码大模型,让机器人为你打工

2024-03-30 15:02:28 1593 1

原创 MyBatis是纸老虎吗?(七)

在MyBatis中一级缓存的生命周期和SqlSession一致;一级缓存内部设计简单,只是一个没有容量限定的HashMap,在缓存的功能性上有所欠缺;一级缓存最大范围是SqlSession内部,如果有多个SqlSession或者在分布式的环境下,数据库写操作会引起脏数据,建议设定缓存级别为Statement

2024-03-25 19:46:19 933

原创 MyBatis是纸老虎吗?(六)

SqlSource是创建一个sql命令字符串原材料,这要怎么理解呢?大家都知道MyBatis提供了很多定义一个sql语句的xml标签吧,比如insert、select、delete、update、sql、parameterMap等等,这些数据解析后会用SqlSource表示,之后通过调用MappedStatement对象上的getBoundSql()方法,该方法会接受一个Object类型的参数值对象,比如本篇案例中提到的UserDto对象,会创建一个BoundSql对象。

2024-03-24 16:05:04 938

原创 MyBatis是纸老虎吗?(五)

通过这篇文章我们知道mapper文件中的sql命令在java中是通过MapperStatement类来表示的,在mapper中,我们可以配置的元素有很多,最常见的是resultMap、insert、delete、update、select及sql等

2024-03-23 15:12:09 660

原创 MyBatis是纸老虎吗?(四)

InterceptorChain是一个容器(暂时这么理解吧),用于存放实现了Interceptor接口的拦截器(通过InterceptorChain中的addInterceptor()方法完成拦截器的添加,数据会添加到InterceptorChain中的interceptors中)。其次该接口中的pluginAll()方法的主要作用是遍历Interceptor拦截器组成的集合

2024-03-19 21:18:42 1006

原创 MyBatis是纸老虎吗?(三)

该方法中的Environment.Builder用到了建造者模式,这里的这个写法是我熟悉的建造者模式的标准写法(定义主类及主类中的Builder类,注意这两个类的属性完全一致,主类中的所有属性只提供get方法,Builder类中既提供get方法,又提供set方法。这里一定要注意主类的构造方法会对相关属性进行判断(实际中不一定要有)。最后使用时先创建Builder对象,然后调用Builder对象上的build()方法创建主类对象)

2024-03-17 20:08:16 986

原创 MyBatis是纸老虎吗?(二)

要回答这个问题,我们可以用一下经验主义。中文中有一种造字手法叫形声字,它是在象形字、指事字、会意字的基础上发展起来的。这种字的特点是:它由两部分组成,一部分表示意义的意符(也称为形旁),另一部分表示声音的声符(也叫做声旁)。形声字的形态多样,可以有不同的排列组合,比如常见的材、偏等等。如果按这种造字方法理解,我觉得前者是一个工厂类(Factory表意,Transaction是一个偏旁),主要用于创建Transaction对象。而后者类似于汉字中的单字,譬如王、土等,王、土这些字表示一种具象化的事务,个人认为

2024-03-10 21:23:38 1099 3

原创 MyBatis是纸老虎吗?(一)

工作这么久,也换了不少工作,每次面试还像高中时参加考试一样,胆战心惊,不知所措。说好听点,是心理素质差,缺乏经验;说难听些,就是知识点掌握不到位,毫无勇气面对别人的考察

2024-03-03 13:30:45 429

原创 ThreadLocal“你”真的了解吗?(二)

ThreadLocalMap是Java中ThreadLocal类中的一个内部类,其主要作用是用于实现线程的本地存储(ThreadLocalStorage,即TLS)的功能。每个线程都有一个与之关联的ThreadLocalMap,在这个map中,键是ThreadLocal对象,值则是我们真正想要在当前线程中保存和隔离的变量。

2024-02-21 22:46:33 1136 3

原创 ThreadLocal“你”真的了解吗?(一)

总的来说,ThreadLocal通过为每个线程维护一份独立的数据副本,巧妙地实现了多线程环境下的数据隔离和安全性,并简化了代码的编写,减少了同步块或锁的使用。但它也要求开发者关注并正确管理其生命周期,以免引发内存泄露问题

2024-02-19 23:04:39 1355 1

原创 Spring 事务原理总结七

总的来看,将TransactionInfo绑定到当前线程的主要目的就是解决嵌套事务的。Spring解决嵌套的主要思路就是先将当前的TransactionInfo对象绑定到当前线程,当当前TransactionInfo对应的业务处理代码调用其他事务代理时,会将当前线程中保存的TransactionInfo对象赋值给新的TransactionInfo对象的oldTransactionInfo属性,然后将新的TransactionInfo对象重新绑定到当前线程的ThreadLocal上,这样就实现了前后两个事务的

2024-02-18 22:31:48 1173

原创 Spring 事务原理总结六

相较于千变万化的事物,我更关注那些恒久不变的东西!

2024-02-17 18:41:45 964

原创 Spring 事务原理总结五

这个方法的主要作用就是判断当前是否存在存活的事务,如果存在事务,则处理之,否则继续。接着就是判断事务是否超时,如果超时,直接抛出超时异常,否则继续。之后就是对事务传播行为的判断,首先就是判断当前的事务传播行为是否为PROPAGATION_MANDATORY,根据《Spring 事务原理总结一》这篇文章的介绍,这个事务传播属性的作用是如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

2024-02-15 02:45:00 3100

原创 Spring 事务原理总结四

通过前面三篇文章,我知道了事务的配置流程,也懂得了向Spring容器中注册事务的流程,更了解了Spring事务中的相关组件及其作用,但这依旧无法让我认识到这个知识点的全貌,所以希望通过今天的跟踪能完全了解Spring事务;也希望通过这次跟踪对Spring事务进行一次总结;更希望通过这次跟踪结束本系列,以为后面的学习腾出时间。

2024-02-14 12:31:27 1287

原创 超时引发的牛角尖二(hystrix中的熟悉面孔)

我们系统调用他们系统地请求会被包装到HystrixCommand子类对象中,然后通过调用该对象上地execute()方法来完成

2024-02-04 22:09:39 1090

原创 Spring 事务原理总结三

梳理一下Spring事务用到的几个核心组件。这些核心组件是我们理解Spring事务原理的基础。通过它们我们可以体会学习一下Spring设计者设计Spring事务时的基本思路

2024-02-03 22:02:02 1011

原创 基础知识总结

计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统。而网络编程就是编写程序使联网的两个或多个设备(比如计算机)之间进行数据传输。Java语言对网络编程提供了良好的支持,通过其提供的接口可以很方便地进行网络编程。接下来将介绍网络的一些基础知识,然后讲解如何通过Java语言进行网络编程。

2024-01-30 22:11:14 857

原创 超时引发的牛角尖一(hystrix概述)

因此,Hystrix是一个强大的库,它通过对服务调用的封装、控制和监视,增强了分布式系统在面对依赖服务延迟、故障时的韧性,从而降低整个系统因依赖关系复杂而引发的风险。类似于电路中的断路器,当某个服务连续失败达到一定阈值时,Hystrix会“熔断”该服务调用,后续请求不再尝试调用故障服务,而是直接进入降级逻辑。针对分布式系统服务之间调用的容错库,它主要用于解决分布式系统中的服务雪崩问题,通过实现服务降级、服务熔断、依赖隔离、以及提供近乎实时的监控等功能。Hystrix 是 Netflix 公司开源的一款。

2024-01-29 20:57:36 361

原创 Spring 事务原理总结二

其实Spring事务的实现方式与前面梳理的AOP的实现方式类似:将事务增强方法与目标方法组成一个执行链,然后由调度者依次调度执行链中的相关方法,从而达到事务控制的目标。

2024-01-28 21:42:40 2213 1

原创 Spring 事务原理总结一

在日常工作中,大家都用过数据库,应该也知道在数据库层面有事务的概念。因为数据库作为一个公共资源,会被很多客户端操作,为了保证实际业务的准确性,一定要有一个方法来规避不可预料的风险。于是,数据库的设计者就提出了事务这个概念

2024-01-21 15:24:46 2462 1

原创 Spring AOP 总结四

Spring AOP这个点从开始写到现在已经持续很长时间了。这个系列我们从一个示例开始,然后逐渐深入,触达Spring AOP之灵魂。通过这个系列,我们不仅捋顺了AOP的定义,也知晓了Spring中AOP的基本概念,更弄清了Spring中AOP的实现细节。虽然自我感觉良好的我还想继续深入,但是毕竟物有本末,事有终始,我们不能因为一个点而错过整个世界。

2024-01-14 13:41:40 1516

原创 Spring AOP 总结三

前两篇文章我们一起梳理了Spring AOP的基本概念及其解析和创建代理的过程,通过梳理我对Spring AOP的认识又向前迈了一大步。不过,对于代理创建过程着墨较少,本篇文章我想继续就这个话题展开,也希望通过这次展开,能让我们对Spring AOP中的CGLIB代理有一些不一样的认识。前一篇文章提到过,Spring创建代理方式是CGLIB(有兴趣的可以浏览一番)。这个创建过程究竟是怎么进行的呢?

2024-01-11 22:10:00 1064

原创 Spring AOP 总结二

AOP是一种编程思想,用于将程序中的横切关注点(如事务、日志)从业务逻辑代码中分离出来,以提高代码的可重用性和可维护性。Spring框架对其进行了实现。在Spring中AOP是通过代理模式实现的,即在运行时动态的生成一个代理,这个代理类会拦截目标对象的方法调用,并在方法执行前后添加响应的横切逻辑

2024-01-07 19:48:00 995

原创 Spring AOP 总结一

AOP是一种编程思想,用于将程序中的横切关注点(如事务、日志)从业务逻辑代码中分离出来,以提高代码得可重用性和可维护性。Spring框架对其进行了实现。在Spring中AOP是通过代理模式实现的,即在运行时动态的生成一个代理,这个代理类会拦截目标对象的方法调用,并在方法执行前后添加响应的横切逻辑

2024-01-01 13:37:09 915

原创 RMI 总结之 Socket 二

为了不留遗憾,我决定继续停留此处,慢慢欣赏这多彩的世界

2023-12-05 13:53:28 870

原创 RMI 总结之 Socket 一

单JVM进程中,对象之间的交流非常简答:A类中new一个B类对象,然后通过这个对象直接调用B类中定义的方法;反过来B类想要调用A类中的方法,同样可以在B类中new一个A类对象,然后用这个对象直接调用A类中定义的方法即可。但这个方法无法使分布在不同JVM进程中的两个对象进行交流。那它们之间就无法交流了吗?相信聪明的你已经找到了使活跃在不同JVM进程中的两个对象进行交流的可靠方法。

2023-12-03 17:57:55 1051

原创 RMI 总结之代理

上一篇我们跟踪了RMI服务端(包含注册中心,以下提到的服务端均是这个含义)的源码。知道了服务端是如何管理服务的——通过一个内存数据结构,HashTable,来完成与服务相关的操作(存储、新增、修改、删除、查找):- 发布服务——调用Registry对象的bind()方法或者rebind()方法- 删除服务——调用Registry对象的unbind()方法- 查找服务——调用Registry对象的lookup()方法- 查询所有服务——调用Registry对象的list()方法。

2023-11-27 12:05:05 964

原创 RMI 源码解读

很多时候,身边那些对学习有一定方法的人都会这样对我说:不必深入源码的每个细节,知道大概就行了。但每次按照这个方式学习,我都会觉得内心无比空虚,觉得懂了,却又总觉得不太懂!所以今天我想继续深入探究大神编写RMI的真实思路,以及其中用到的知识技巧。下面我们用一句代码来打开Java RMI世界的大门。(以下均为个人整理,如有错误,还望指正!)

2023-11-25 22:20:00 997

原创 RMI 深入探究

前面我们学习了RMI的一些基本知识,本节我们将深入理解RMI应用的基本架构并在此基础上构建自己的RMI应用程序。

2023-11-23 22:55:24 907

原创 聊聊RMI

今天我想看看Java RMI开发,可能有些大佬会这样想:小菜鸡,现在谁还学这个,Spring Cloud、Dubbo不香吗?是的,从赚钱的角度看,掌握这些主流的框架很有竞争力。但我有一个毛病,如果不能把相对底层的逻辑捋顺清楚,很难有继续进行的动力,甚至会直接自我放弃,破罐子破摔。同时我还有个不好的习惯,那就是脑子笨记不住一切重要的东西,可能这就是我一直无法进步的原因吧。今天我想以RMI作为起点,用新的方式来帮助自己记住一些重要的知识。那就开始吧!

2023-11-23 22:34:26 817

Eureka框架学习包

Eureka框架学习包

2024-06-03

空空如也

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

TA关注的人

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