自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring-Repackage:Spring-Boot项目打包原理

是指SpringBoot应用打包时,会生成一个Spring-Boot应用的jar包,可以直接通过执行其原因是因为在接管了maven生命周期中的package改变了打包的行为,不再生成默认作为类库形式的jar包,而是生成一个可执行jar包。

2023-09-10 21:38:41 499

原创 Mybatis的Mapper扫描机制:@MapperScan源码

通过@Import注解导入了MapperScannerRegistrarMapperScannerRegistrar向容器中注入是一个BeanDefinitionRegistryPostProcessor,将会被Spring容器回调方法在方法中创建了,并且调用ClassPathMapperScanner的scan方法重写了父类ClassPathBeanDefinitionScanner的doScan方法,在扫描完Bean获取到BeanDefinition后,在方法对其进行了额外的处理。

2023-09-03 22:08:13 2095

原创 Spring的Bean扫描机制:ClassPathBeanDefinitionScanner源码

ClassPathBeanDefinitionScanner是如何扫描包下的类的

2023-09-03 14:58:56 359

原创 使用Java实现Replication协议(1):请求dump mysql binlog

具体来说,就是通过Java代码与MySQL服务端进行交互,使用 “dump” 命令获取MySQL数据库的二进制日志(binlog),并将其中的事件(event)进行解析。本次开发都是基于Mysql官方文档的描述 ( 我在写这篇博客时,文档对应的版本为:8.1.0 )说真的,一点也不难,整体代码量很少,只要大家多看文档,跟着文章一步步操作,一定可以实现。是一个非常厉害的抓包软件,内嵌了市面上绝大部分协议的解析, 其中就包括。文档上也有一些错误的描述,可能是更新不及时导致的。我使用的是php study。

2023-07-25 23:36:34 175

原创 使用Java实现Replication协议(2):与Mysql进行握手

根据Mysql协议的定义,无论是我们发送的数据包,还是服务端响应的数据包都该满足以下格式字段类型字段名称字段含义int数据负载包长度int序列号stringpayload数据负载包,注意,这里的var指就是数据包文档链接那么int又是什么呢根据Mysql数据类型规定,int就是长度为3的整形,属于类型类型还有以下候选值int: 1 字节整形int: 2 字节整形int: 3 字节整形int: 4 字节整形。

2023-07-25 23:35:54 154

原创 Spring-Cloud源码:加载Nacos远程配置到Spring容器中

在spring-cloud-starter-alibaba-nacos-config.jar包中的。接下来,将继续分析,从Nacos获取到的配置,是如何放入Spring的Environment中的。至此:如何从Nacos读取配置放入到Spring的Environment的源码分析就结束了。这一块属于Spring-Cloud的源码知识,就不深究了。这块属于Nacos的源码,在本章中就不继续深究了。用于加载额外的配置,应用场景比较少,且。的方法细节就不去深究了,其目的就是将将。方法,接着往下看未分析的代码。

2023-06-04 20:41:17 378

原创 Spring-Cloud源码:@RefreshScope

注解标注的class,会生成两个BeanDefinition一个是LockedScopedProxyFactoryBean :用于生成代理对象一个是class对应的BeanDefinition,我们暂成为原始BeanDefinition :用于生成原始Bean原始Bean是不可被注入的,实际上注入的都是代理Bean代理Bean执行方法时,都是通过获取原始Bean来执行的原始Bean是一个Scope类型的Bean,通过对象来获取原型Bean具有缓存机制。

2023-06-03 19:52:12 260

原创 Spring-Cache源码:基于注解的缓存

首先,通过注解引入注入到容器中将注入到容器中基于Spring-AOP创建代理对象代理对象执行方法时被拦截将@Cacheable@CachePut转换为对应的在execute()方法中基于介入方法的执行流程,处理各种缓存逻辑。

2023-05-29 17:48:40 212 1

原创 Spring-AOP源码

有 Doug Lea 写代码那味了, 如果没有花括号就更像了(手动狗头)介入对象创建生命周期并且创建代理的流程就已经结束了。注解定义的切面,就是在这里被找到并且被包装为。为空,那么表示没有为当前bean找到合适的。这样写的好处就是一行代码做了两件事,代理对象的,不应该也不需要被代理。核心方法,找到可以为当前类使用的。,也就不需要为其创建代理,直接把。什么条件下这个判断才能成功呢?子类重写了该方法,具体会调用到。中最最核心的类,由该类介入。—> 进入5.3跟踪源码。—> 进入5.4跟踪源码。

2023-05-28 18:11:39 52

原创 Spring-AOP源码-ProxyFactory

可以看到,这里还没有组装拦截器链条,只是有一层缓存的逻辑。用于作为方法结果返回的,也就是真正的执行器链对象。那么执行代理对象的任何方法都会执行到当前对象的。在ProxyFactory使用篇章中有提到过,是Spring-AOP中非常核心的类,如果不懂。99%的情况下都是这个分支,例如我们直接使用。一个优化点,如果提前检查过了,那么就不再通过。方法了,代理对象的任何方法执行前都会执行。可以基于类和方法判断是否进行切入,类创建了代理对象,且第三个参数。,还有一些其他的属性,例如。接口下的实现类转换为。

2023-05-13 16:42:46 205

原创 Spring番外篇-ProxyFactory

如果希望在当前方法中拿到被增强后的对象,可以借助。注解,在注解内指定表达式,最终该类就会被封装成。注:Spring创建代理时,最常用的。注:Spring创建代理时,最常用的。注解,最终该增强类就会被封装成。在代理对象执行方法时,通过。创建静态代理有什么好处?创建代理时:给增强类标注。根据输出结果可以发现,创建代理时:给类标注。指向的未被代理的对象。

2023-05-03 23:17:03 150

原创 Spring番外篇-ResolvableType

再进行注入,其实就是使用了ResolvableType。在Spring的依赖注入中,如果给依赖类声明了。,Spring甚至可以。

2023-05-02 21:36:39 224

原创 Spring番外篇-AliasFor注解

假设定义了这样一个组合注解,可以同时指定Dubbo和Spring的包扫描路径。(为什么要定义两个意义一样的属性呢?方便调用者使用,例如。都是一个意思,标识了groovy脚本的路径。那么声明这一个注解,就相当于同时声明了。@AliasFor声明的两个属性,必须。属性可以省略key,而使用。注解,注解内部定义的。注解标注后,无论获取。

2023-04-09 21:47:32 137

原创 Spring番外篇-PropertyAccessor

BeanWrapper所有的属性操作都是调用getter/setter方法完成的。如果类定义了字段,但是没有getter和setter,那么无法为这个字段赋值。DirectFieldAccessor通过直接访问字段为属性赋值。PropertyAccessor又分为两种。使用BeanWrapper为对象赋值。key:通常为字符串类型,支持嵌套。执行完后,对象的json形式如下。执行完后,对象的json形式如下。有一个Student类定义如下。value: 任意类型。

2023-04-08 18:11:49 139

原创 Spring番外篇-ListenableFuture

其实更好的方式是给future添加一个listener,成功或者异常后回调listener。,因为功能非常强大,性能也很优秀,Doug Lea大神对其的优化无所不用其极。这个线程池定义了两个方法返回ListenableFuture。什么情况下该使用ListenableFuture。就对原生的Future做了增强,提供了。(redis客户端)就大量地使用了。诞生于Spring4.0,晚于。在Spring团队后面创造的。,当时Netty4也晚于。所以Spring创造了。其他情况下都更推荐使用。

2023-04-08 17:29:10 473

原创 使用Spring获取方法参数名

结合maven的源码,可以看到,上面pom的配置对应的就是源码中的这个属性。可以看到,在编译后,就已经把方法的名称存储到了常量池中,直接就可以通过。获取TestClass的方法参数名以及构造方法参数名。假设我们有一个TestClass, 定义如下。可以看到这次的class文件中已经不包含。但是任然可以通过局部变量表获取参数名称。属性为true时,就会在编译时添加。使用maven编译时开启。根据源码的注释得知,当。属性默认为true,日志级别可以看到执行。

2023-04-02 21:50:01 592

原创 Spring番外篇-SingletonSupplier

还在手写DoubleCheck创建单例对象吗。不妨直接使用Spring提供好的轮子。

2023-04-01 19:58:25 207

原创 SpringBoot-Binder的使用

通过Binder以属性名前缀获取属性对象

2023-04-01 17:06:10 922

原创 Spring番外篇-SearchStrategy.INHERITED_ANNOTATIONS

其实jdk是可以获取父类上的注解的,但是有一个。,那就是作用于父类上的注解必须使用。

2023-03-25 19:37:54 202

原创 Spring番外篇-MergedAnnotations

所以Spring提供了MergedAnnotations,使获取注解上更加的容易和"人性化"以下为创建MergedAnnotations最常用的两个方法 ( static )因为在JDK中提供获取注解的api过于简易,稍微复杂一点的场景就无法胜任。MergedAnnotations:合并了。方法1实际上是方法2的重载。

2023-03-25 19:37:51 738

原创 VUE-ElementUI,DatePicker组件在移动端阻止键盘弹出

由于公司的项目需要运行平板上。但是DateTimePicker的时间输入框在平板上弹出的键盘会挡住时间的选择,最近公司的前端小伙伴一直在头疼这件事。我就看了一下DateTimePicker组件的源码,结合自己对Vue的浅显认知,添加了下面的代码// 由于DatePicker本身是可以输入的,将该props置为false,点击时也不会弹出输入框// 需要在Vue.use前覆盖属性Element.DatePicker.props.editable = falseVue.use(Element,

2020-12-11 14:40:30 3697 1

空空如也

空空如也

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

TA关注的人

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