- 博客(191)
- 收藏
- 关注
原创 spring源码
RequestMappingHandlerAdapter 初始化时会解析 @ControllerAdvice 中的 @InitBinder 方法RequestMappingHandlerAdapter 会以类为单位,在该类首次使用时,解析此类的 @InitBinder 方法以上两种 @InitBinder 的解析结果都会缓存来避免重复解析控制器方法调用时,会综合利用本类的 @InitBinder 方法和 @ControllerAdvice 中的 @InitBinder 方法创建绑定工厂。
2023-04-02 21:25:46 163
原创 【二十四讲】ControllerAdvice 之 @InitBinder
RequestMappingHandlerAdapter 初始化时会解析 @ControllerAdvice 中的 @InitBinder 方法RequestMappingHandlerAdapter 会以类为单位,在该类首次使用时,解析此类的 @InitBinder 方法以上两种 @InitBinder 的解析结果都会缓存来避免重复解析控制器方法调用时,会综合利用本类的 @InitBinder 方法和 @ControllerAdvice 中的 @InitBinder 方法创建绑定工厂。
2022-10-12 22:39:25 451
原创 【第四十七讲】 @Autowired 装配底层
Autowired 本质上是根据成员变量或方法参数的类型进行装配如果待装配类型是 Optional,需要根据 Optional 泛型找到 bean,再封装为 Optional 对象装配如果待装配的类型是 ObjectFactory,需要根据 ObjectFactory 泛型创建 ObjectFactory 对象装配此方法可以延迟 bean 的获取如果待装配的成员变量或方法参数上用 @Lazy 标注,会创建代理对象装配此方法可以延迟真实 bean 的获取被装配的代理不作为 bean。
2022-10-12 22:36:31 443
原创 【第四十六】 @Value 装配底层-第四讲延续
ContextAnnotationAutowireCandidateResolver 作用之一,获取 @Value 的值了解 ${ } 对应的解析器了解 #{ } 对应的解析器TypeConvert 的一项体现。
2022-10-12 22:35:37 250
原创 【第四十五】代理进一步理解
spring 代理的设计特点依赖注入和初始化影响的是原始对象因此 cglib 不能用 MethodProxy.invokeSuper()代理与目标是两个对象,二者成员变量并不共用数据static 方法、final 方法、private 方法均无法增强进一步理解代理增强基于方法重写。
2022-10-12 22:33:31 229
原创 【第四十二讲】条件装配底层
条件装配的底层是本质上是 @Conditional 与 Condition,这两个注解。引入自动配置类时,期望满足一定条件才能被 Spring 管理,不满足则不管理,怎么做呢?比如条件是【类路径下必须有 dataSource】这个 bean ,怎么做呢?首先编写条件判断类,它实现 Condition 接口,编写条件判断逻辑。工程里面存在 druid 就加载 bean1,否则就加载 bean2。其次,在要导入的自动配置类上添加。,将来此类被导入时就会做条件检查。
2022-10-10 22:20:42 188
原创 【第四十一讲】 Boot 自动配置
Spring Boot 是利用了自动配置类来简化了 aop 相关配置AOP 自动配置类为可以通过禁用 aop 自动配置AOP 自动配置的本质是通过来开启了自动代理,如果在引导类上自己添加了那么以自己添加的为准的本质是向容器中添加了这个 bean 后处理器,它能够找到容器中所有切面,并为匹配切点的目标类创建代理,创建代理的工作一般是在 bean 的初始化阶段完成的。
2022-10-09 22:52:17 300
原创 【第三十九讲】Boot 启动流程
发布 application prepared 事件三种方式Config配置类xml 文件包扫描} };} };
2022-10-07 23:59:13 276
原创 vue学习
2.动态合并两个对象的属性1.vue核心1.1Vue简介1.1.1官网英文官网中文官网1.1.2. 介绍与描述动态构建用户界面的渐进式JavaScript框架作者:尤雨溪1.1.3. Vue的特点遵循MVVM模式编码简洁,体积小,运行效率高,适合移动/PC端开发它本身只关注UI,可以引入其它第三方库开发项目1.1.4.与其他JS框架的关联借鉴 Angular 的模板和数据绑定技术借鉴 React 的组件化和虚拟DOM技术1.1.5 Vue周边库vue-c
2022-09-23 20:16:33 1154
原创 【第四十九讲】事件-发布器
事件发布器模拟实现addApplicationListenerBean 负责收集容器中的监听器监听器会统一转换为 GenericApplicationListener 对象,以支持判断事件类型multicastEvent 遍历监听器集合,发布事件发布前先通过 GenericApplicationListener.supportsEventType 判断支持该事件类型才发事件可以利用线程池进行异步发事件优化。
2022-09-11 15:29:37 267
原创 【第四十八讲】事件-监听器
context.close 也会调用 ApplicationListener,所以反射的时候需要进行判断,不然会报错。
2022-09-11 15:28:29 412
原创 【第二十三讲】对象绑定与类型转换
ServletRequestDataBinderFactory 的用法和扩展点可以解析控制器的 @InitBinder 标注方法作为扩展点,添加自定义转换器控制器私有范围可以通过 ConfigurableWebBindingInitializer 配置 ConversionService 作为扩展点,添加自定义转换器公共范围同时加了 @InitBinder 和 ConversionService 的转换优先级优先采用 @InitBinder 的转换器。...
2022-08-28 23:29:51 143
原创 【第二十二讲】获取参数名
如果编译时添加了 -parameters 可以生成参数表, 反射时就可以拿到参数名如果编译时添加了 -g 可以生成调试信息, 但分为两种情况普通类, 会包含局部变量表, 用 asm 可以拿到参数名接口, 不会包含局部变量表, 无法获得参数名这也是 MyBatis 在实现 Mapper 接口时为何要提供 @Param 注解来辅助获得参数名。...
2022-08-28 00:30:44 764
原创 【第二十一讲】参数解析器
RequestMappingHandlerAdapter 调用过程为控制器方法被封装为 HandlerMethod准备对象绑定与类型转换准备 ModelAndViewContainer 用来存储中间 Model 结果解析每个参数值解析参数依赖的就是各种参数解析器,它们都有两个重要方法supportsParameter 判断是否支持方法参数resolveArgument 解析方法参数常见参数的解析* 省略 @RequestParam* @Value。
2022-08-24 21:50:39 378
原创 【第二十讲】RequestMappingHandlerMapping 与 RequestMappingHandlerAdapter
test3中}TokenArgumentResolver 加载自定义注解并添加到配置类@Override // 是否支持某个参数 public boolean supportsParameter(MethodParameter parameter) {= null;
2022-08-24 21:46:40 1093
原创 【第五讲】BeanFactory 后处理器
实现BeanFactoryPostProcessor两处修改}try {// 模拟@ComponentScan ComponentScan componentScan = AnnotationUtils . findAnnotation(Config . class , ComponentScan . class);= null) {
2022-08-09 22:56:03 680
原创 【第四讲】Bean后处理器
由于InjectionMetadata.inject(bean1, “bean1”, null)的源码调用链过长,摘出主要调用过程进行演示。调用 InjectionMetadata 来进行依赖注入,注入时按类型查找值。是一个【干净】的容器,默认不会添加任何后处理器,方便做测试,这里用。这些注解分别是由哪个后处理器来解析的。如何去Bean工厂里面按类型查找值。也可以完成测试,只是会比使用。完成注解的解析和注入的功能。注解解析用到的后处理器时。这个后处理器就是通过调用。给 bean3 加上。...
2022-08-07 23:18:47 728
原创 【第二讲 】容器实现
此时打印 bean2 是为空的,因为 @Autowired 没有起作用添加此时是 调用了 getBean 才创建对象使用 beanFactory.preInstantiateSingletons()后学到了什么A. beanFactory 不会做的事B. Bean 后处理器会有排序的逻辑整理代码bean 后处理器排序逻辑问题:同时加@Autowired 和 @ Resource 那一段会生效增加比较器后,顺序发生了变化通过AnnotationConfigUtils给beanFactory添加
2022-08-07 23:14:32 388
原创 【第一讲】容器接口
在bean生命周期最后一步-初始化后,调用beanPostProcessor的postProcessorAfterInitialization方法,生成代理对象,与JDK动态代理,项目中采用JDK动态代理实现AOP。使用JDK动态代理要求bean实现接口,项目中定义了UserService这个接口。就是通过BeanPostProcessor的postProcessorAfterInitialization方法(初始化后)实现的。postProcessorAfterInitialization方法具体实现。.
2022-08-07 23:09:45 338
转载 【spring】 AOP-06
在bean生命周期最后一步-初始化后,调用beanPostProcessor的postProcessorAfterInitialization方法,生成代理对象,与JDK动态代理,项目中采用JDK动态代理实现AOP。使用JDK动态代理要求bean实现接口,项目中定义了UserService这个接口。就是通过BeanPostProcessor的postProcessorAfterInitialization方法(初始化后)实现的。postProcessorAfterInitialization方法具体实现。.
2022-07-24 23:50:57 88
转载 【spring】 BeanPostProcessor-05
BeanPostProcessor是spring对外提供的bean的扩展机制,用于对bean进行扩展操作,常见的比如就是采用BeanPostProcessor接口实现的。
2022-07-24 23:50:13 149
转载 【spring】 初始化机制-04
UserServiceImpl类也实现了InitializingBean接口。在spring的bean的生命周期中,同时也会执行bean的初始化操作。用于spring中bean的初始化操作。
2022-07-24 23:49:24 88
转载 【spring】启动和扫描逻辑实现-01
在Java中,需要加class加载到JVM中,不同的类是由不同的类加载器去完成加载的,Bootstrap类加载器加载jre/lib目录下的类,Ext类加载器加载jre/ext/lib目录下的类,App类加载器加载classpath目录下的类。在spring容器启动的过程中,会扫描指定包路径下的class文件,判断当前类是否是一个bean对象,如果是一个bean对象,将其注入到spring容器中。描述一个bean的全部信息,比如class类型,bean的作用域,是否懒加载。...
2022-07-24 23:46:15 277
转载 【16】SpringBoot源码分析-01
Spring、Mybatis、Springmvc、Springboot 必须要掌握和明白源码分析SpringCloud 你至少使用,并且说出这些组件他们的含义以及在项目所处角色如果有一些源码分析的话,就非常不错了Dubbo、Tomcat 源码分析1、帮助开发者快速整合第三方框架(原理Maven依赖封装)2、嵌服务器(原理Java语言创建服务器)3、完全注解形式替代XML传统的spring项目基于xml方式依赖的第三方的模块,都在pom.xml逐个依赖,还需要在xml文件中去配置配置的目的就是让spring
2022-07-21 22:59:56 181
转载 【15】SpringBoot快速整合Mybatis&MybatisPlus
}}/***@Description根据用户id查询用户信息}/***@Description根据用户id查询用户信息}}是UserMapper,可以不用注入了。
2022-07-20 23:48:13 588
转载 【14】SpringBoot的参数校验器-Validator
在spring框架框架的开发中,只需要两个步骤1在需要校验的bean(entity)中的属性上增加对应注解2在springmvc的方法参数中的entity中加==@Validated==的注解即可。3使用全局统一异常处理捕获的验证失败的提示信心Stringmessage()default"手机格式不正确!";Class...
2022-07-20 23:46:27 1539
转载 【11】Spring和SpringBoot中容器注入的那些事情
springIoc它是spring的最基石,它专门去负责对象的初始化,管理和装配以及获取等相关处理和工作。在对象注册过程中,可能存在类和类之间引用关系,这个关系可能会引发spring中对象的注入,也就依赖注入(DI),如果要完成依赖注入就必要有遵循依赖注入原则1、构造函数注入2、set注入3、@Autowired&@Resource注解注入4、FactoryBean注入(工厂注入)一句话DI—DependencyInjection,即“依赖注入”4、FactoryBean注入(工厂注入)......
2022-07-20 21:34:53 647
转载 【12】关于R类的统一返回的拦截处理
在实际开发中,如果你团队的人员结构不是特别多的时候,比如1-11人等。这个其实还是很好管理。但是随着你的公司的组织结构越来越多,你接下的架构任何变化和调整可能都会面临阻碍。它是利用spring中的AOP机制来完成的一种,对springmvc请求过程中对请求方法的结果进行增强的一种通知。它会对你的结果进行加密,加工等处理,把加工的数据返回给浏览器。如果你写这种代码在公司里推广给整个公司的人去使用,估计会被吐槽。但是其实这个是很大的问题和弊端,因为你每写一个接口或者方法,都需要进行R返回,还是蛮累的。...
2022-07-20 21:31:54 138
转载 【13】SpringBoot封装全局异常处理器
全局异常处理就是指把整个系统的异常统一自动处理,程序员可以做到不用些try/catch就能进行处理项目中出现的异常。为什么需要全局异常处理呢?在开发中,如果不用try/catch进行捕获的话。客户端就会跳转到springboot默认的异常页面。报出500的错误信息。在开发中遇见了异常一般的程序开发者都会使用try/catch来进行捕获处理,如下:有没有更好的处理解决方案呢?答案是:有的。可以采用全局异常处理器来解决这个问题。上面的方式就没办法在try/catch进行处理。而且直接返回这些错误信息,
2022-06-09 22:45:27 841
转载 【10】SpringBoot父子工程模块化开发之路
开发工具:idea / spring tool suitjdk环境:jdk1.8+maven的:3.5+父工程作用:统一管理所以的子工程,以及相关版本统一管理和依赖,可以统一编译。父工程的注意事项:1、删除src目录2、把pom.xml中的的packaging修改成pom03、把springboot交给父工程来管理在父的pom.xml把springboot交给工程统一管理,如下:04、建设的子模块和父工程进行依赖和管理04-01、给父工程创建子模块也就是说在要父工程的pom.xml去建设子工程管
2022-06-09 22:41:17 326
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人