
Spring
文章平均质量分 77
Zzzj_1233
这个作者很懒,什么都没留下…
展开
-
Spring番外篇-MergedAnnotations
所以Spring提供了MergedAnnotations,使获取注解上更加的容易和"人性化"以下为创建MergedAnnotations最常用的两个方法 ( static )因为在JDK中提供获取注解的api过于简易,稍微复杂一点的场景就无法胜任。MergedAnnotations:合并了。方法1实际上是方法2的重载。原创 2023-03-25 19:37:51 · 2078 阅读 · 0 评论 -
Spring番外篇-SearchStrategy.INHERITED_ANNOTATIONS
其实jdk是可以获取父类上的注解的,但是有一个。,那就是作用于父类上的注解必须使用。原创 2023-03-25 19:37:54 · 388 阅读 · 0 评论 -
SpringBoot-Binder的使用
通过Binder以属性名前缀获取属性对象原创 2023-04-01 17:06:10 · 1659 阅读 · 0 评论 -
Spring番外篇-SingletonSupplier
还在手写DoubleCheck创建单例对象吗。不妨直接使用Spring提供好的轮子。原创 2023-04-01 19:58:25 · 348 阅读 · 0 评论 -
使用Spring获取方法参数名
结合maven的源码,可以看到,上面pom的配置对应的就是源码中的这个属性。可以看到,在编译后,就已经把方法的名称存储到了常量池中,直接就可以通过。获取TestClass的方法参数名以及构造方法参数名。假设我们有一个TestClass, 定义如下。可以看到这次的class文件中已经不包含。但是任然可以通过局部变量表获取参数名称。属性为true时,就会在编译时添加。使用maven编译时开启。根据源码的注释得知,当。属性默认为true,日志级别可以看到执行。原创 2023-04-02 21:50:01 · 1093 阅读 · 0 评论 -
Spring番外篇-ListenableFuture
其实更好的方式是给future添加一个listener,成功或者异常后回调listener。,因为功能非常强大,性能也很优秀,Doug Lea大神对其的优化无所不用其极。这个线程池定义了两个方法返回ListenableFuture。什么情况下该使用ListenableFuture。就对原生的Future做了增强,提供了。(redis客户端)就大量地使用了。诞生于Spring4.0,晚于。在Spring团队后面创造的。,当时Netty4也晚于。所以Spring创造了。其他情况下都更推荐使用。原创 2023-04-08 17:29:10 · 1123 阅读 · 0 评论 -
Spring番外篇-PropertyAccessor
BeanWrapper所有的属性操作都是调用getter/setter方法完成的。如果类定义了字段,但是没有getter和setter,那么无法为这个字段赋值。DirectFieldAccessor通过直接访问字段为属性赋值。PropertyAccessor又分为两种。使用BeanWrapper为对象赋值。key:通常为字符串类型,支持嵌套。执行完后,对象的json形式如下。执行完后,对象的json形式如下。有一个Student类定义如下。value: 任意类型。原创 2023-04-08 18:11:49 · 355 阅读 · 0 评论 -
Spring番外篇-AliasFor注解
假设定义了这样一个组合注解,可以同时指定Dubbo和Spring的包扫描路径。(为什么要定义两个意义一样的属性呢?方便调用者使用,例如。都是一个意思,标识了groovy脚本的路径。那么声明这一个注解,就相当于同时声明了。@AliasFor声明的两个属性,必须。属性可以省略key,而使用。注解,注解内部定义的。注解标注后,无论获取。原创 2023-04-09 21:47:32 · 380 阅读 · 0 评论 -
Spring番外篇-ResolvableType
再进行注入,其实就是使用了ResolvableType。在Spring的依赖注入中,如果给依赖类声明了。,Spring甚至可以。原创 2023-05-02 21:36:39 · 409 阅读 · 0 评论 -
Spring番外篇-ProxyFactory
如果希望在当前方法中拿到被增强后的对象,可以借助。注解,在注解内指定表达式,最终该类就会被封装成。注:Spring创建代理时,最常用的。注:Spring创建代理时,最常用的。注解,最终该增强类就会被封装成。在代理对象执行方法时,通过。创建静态代理有什么好处?创建代理时:给增强类标注。根据输出结果可以发现,创建代理时:给类标注。指向的未被代理的对象。原创 2023-05-03 23:17:03 · 340 阅读 · 0 评论 -
Spring-AOP源码-ProxyFactory
可以看到,这里还没有组装拦截器链条,只是有一层缓存的逻辑。用于作为方法结果返回的,也就是真正的执行器链对象。那么执行代理对象的任何方法都会执行到当前对象的。在ProxyFactory使用篇章中有提到过,是Spring-AOP中非常核心的类,如果不懂。99%的情况下都是这个分支,例如我们直接使用。一个优化点,如果提前检查过了,那么就不再通过。方法了,代理对象的任何方法执行前都会执行。可以基于类和方法判断是否进行切入,类创建了代理对象,且第三个参数。,还有一些其他的属性,例如。接口下的实现类转换为。原创 2023-05-13 16:42:46 · 648 阅读 · 0 评论 -
Spring-AOP源码
有 Doug Lea 写代码那味了, 如果没有花括号就更像了(手动狗头)介入对象创建生命周期并且创建代理的流程就已经结束了。注解定义的切面,就是在这里被找到并且被包装为。为空,那么表示没有为当前bean找到合适的。这样写的好处就是一行代码做了两件事,代理对象的,不应该也不需要被代理。核心方法,找到可以为当前类使用的。,也就不需要为其创建代理,直接把。什么条件下这个判断才能成功呢?子类重写了该方法,具体会调用到。中最最核心的类,由该类介入。—> 进入5.3跟踪源码。—> 进入5.4跟踪源码。原创 2023-05-28 18:11:39 · 255 阅读 · 0 评论 -
Spring-Cache源码:基于注解的缓存
首先,通过注解引入注入到容器中将注入到容器中基于Spring-AOP创建代理对象代理对象执行方法时被拦截将@Cacheable@CachePut转换为对应的在execute()方法中基于介入方法的执行流程,处理各种缓存逻辑。原创 2023-05-29 17:48:40 · 323 阅读 · 1 评论 -
Spring-Cloud源码:@RefreshScope
注解标注的class,会生成两个BeanDefinition一个是LockedScopedProxyFactoryBean :用于生成代理对象一个是class对应的BeanDefinition,我们暂成为原始BeanDefinition :用于生成原始Bean原始Bean是不可被注入的,实际上注入的都是代理Bean代理Bean执行方法时,都是通过获取原始Bean来执行的原始Bean是一个Scope类型的Bean,通过对象来获取原型Bean具有缓存机制。原创 2023-06-03 19:52:12 · 540 阅读 · 1 评论 -
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 · 800 阅读 · 0 评论 -
Spring的Bean扫描机制:ClassPathBeanDefinitionScanner源码
ClassPathBeanDefinitionScanner是如何扫描包下的类的原创 2023-09-03 14:58:56 · 832 阅读 · 0 评论 -
Mybatis的Mapper扫描机制:@MapperScan源码
通过@Import注解导入了MapperScannerRegistrarMapperScannerRegistrar向容器中注入是一个BeanDefinitionRegistryPostProcessor,将会被Spring容器回调方法在方法中创建了,并且调用ClassPathMapperScanner的scan方法重写了父类ClassPathBeanDefinitionScanner的doScan方法,在扫描完Bean获取到BeanDefinition后,在方法对其进行了额外的处理。原创 2023-09-03 22:08:13 · 8510 阅读 · 0 评论 -
Spring-Repackage:Spring-Boot项目打包原理
是指SpringBoot应用打包时,会生成一个Spring-Boot应用的jar包,可以直接通过执行其原因是因为在接管了maven生命周期中的package改变了打包的行为,不再生成默认作为类库形式的jar包,而是生成一个可执行jar包。原创 2023-09-10 21:38:41 · 1444 阅读 · 0 评论