自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SQL调优实战总结

SQL调优实战总结前言作为开发人员,我们免不了与sql打交道。有些sql可能在业务的最开始,执行是毫无问题的。但是随着业务量的提升以及业务复杂度的加深,可能之前的sql就会逐渐展现出疲惫之势了。这时就会面临sql调优。那么调优到底如何调?不同的人有不同的姿势。可能大部分人首先想到的就是加索引。没错,加索引是一种比较典型,也是一种比较廉价的手段。但是,索引怎么加?加在哪里?加之后是否会对已有的其他sql产生影响?这些问题都是需要考虑的。同时也应该意识到,索引是一把双刃剑,就像硬币的两面,加快查询

2021-02-21 14:13:29 936

原创 spring mongo使用之类型转换踩坑记录

背景java中对于金额,我们通常使用Bigdecimal进行存储,而mongo中是不存在Bigdecimal类型,对应的是Decimal128。项目中使用mongo的地方,为了能够在插入mongo时将Bigdecimal转为Decimal128,查询时将Decimal128转回Bigdecimal,可以利用spring中的org.springframework.core.convert.converter.Converter。如下BigDecimalToDecimal128Converter.clas

2020-11-19 21:41:09 2250

原创 循环依赖所注入的实例竟不是容器中的实例之一,依赖关系

写在前面私以为自己对于spring的循环依赖理解的已经很不错了,直到前段时间遇到了一个让我思考了良久的问题,即“循环依赖所注入的实例竟不是容器中的实例”。于是又从头仔细撸了一遍源码,才最终找到原因。因为我觉的整个过程涉及到的知识点还蛮多的,所以准备用6-7篇来针对“循环依赖所注入的实例竟不是容器中的实例”这个问题进行剖析。问题引出废话不多说,先来看看这个问题是什么?有两个Service具有循环引用关系,分别是ServiceA和ServiceB,如下。ServiceA.class@Service

2020-11-07 21:36:44 256

原创 搞懂AOP之三,偏序排序

可能大家看到这个标题会很有疑问,怎么讲着讲着AOP开始讲起来排序了?先说一下大家都比较熟悉的东西。回忆一下,我们如果想向容器中加入自定义的切面该怎么做?两种方法,其一我们可以自定义Advisor注入到容器中,其二就是利用@Aspect标示一个类为切面配置类,并利用@Around, @Before, @After, @AfterReturning, @AfterThrowing定义一些切面的实现,最后将切面配置类注入到容器中。第一种方法我们后续会进行详细剖析。第二中方法我想应该是大家比较常用的方式。而这跟偏

2020-10-23 20:15:38 1511

原创 搞懂AOP之二,引入增强

回顾在上一篇搞懂AOP之一,拦截器链中,我们介绍了MethodInterceptor增强目标类的方式,了解到了AOP的拦截器是如何使用,以及多个拦截器组成的拦截器链是如何工作的,并且看到了如何使用ProxyFactory去创建代理类。本篇接上篇,接着介绍另外一种增强方式–引入增强。了解引入增强定义spring中的引入增强对应IntroductionInterceptor类。看下spring对其的定义:/** * Subinterface of AOP Alliance MethodInterce

2020-09-29 20:54:50 465

原创 搞懂AOP之一,拦截器链

bean的创建过程中的初始化阶段的后置处理,在满足条件的情况下会对bean进行AOP增强。核心实现就是AbstractAutoProxyCreator的wrapIfNecessary方法。该方法主要逻辑实现就是,找到容器中能够应用到当前所创建的bean的切面,利用切面为bean创建代理对象。本篇不准备对着源码一步一步讲解这一过程,而是准备剖析一下这一过程中所用到的一些类和方法的功能,当这些都熟悉之后“螺丝”,再一步一步看源码的时候,便会豁然开朗。这也是我在阅读源码过程中的感觉,因为spring的整套源码一

2020-09-27 19:59:26 1382 2

原创 注解实现策略模式干掉if-else(下)

上篇回顾上一篇中我们介绍了如何通过注解实现策略模式,定义@OrderHandlerType注解和对应的注解实现类OrderHandlerTypeImpl,并维护了类型为Map<OrderHandlerType, OrderHandler>的orderHandleMap,完成了订单来源与支付方式到订单处理器Handler的映射关系,使得我们在选择订单处理器Handler时更加灵活,更易扩展。但是在上篇中遗留了一个问题,那就是如果PC端支付宝支付和微信支付是同一种处理逻辑,而移动端支付宝支付和微

2020-06-16 17:25:00 715

原创 注解实现策略模式干掉if-else(上)

注解实现策略模式干掉if-else策略模式经常在网上看到一些名为“别再if-else走天下了”,“教你干掉if-else”等之类的文章,大部分都会讲到用策略模式去代替if-else。策略模式实现的方式也大同小异。主要是定义统一行为(接口或抽象类),并实现不同策略下的处理逻辑(对应实现类)。客户端使用时自己选择相应的处理类,利用工厂或其他方式。注解实现本文要说的是用注解实现策略模式的方式,以及一些注意点。话不多说,还是以最常 见的订单处理为例。首先定义这样一个订单实体类:@Datapublic

2020-06-13 23:52:41 1743

空空如也

空空如也

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

TA关注的人

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