spring系列原理
文章平均质量分 85
spring系列原理
小鲁蛋儿
莫道桑榆晚,为霞尚满天。
展开
-
SpringMVC原理学习(三)获取参数名
属性就是,实现运行时获取方法参数的核心。这个属性是 Java 8 的 class 文件新加的,在MethodParameters保存的信息可以通过反射获取。Spring对这俩种都支持,DefaultParameterNameDiscoverer 是上一节用过的参数名的解析器,看它的内部实现。由于学习成本 ASM 高,这里使用 Spring 封装好的工具类,通过本地变量表获取参数名,底层使用 ASM 获取参数名。1)如果编译时添加了 -parameters 可以生成参数表, 反射时就可以拿到参数名。原创 2022-11-09 14:57:49 · 629 阅读 · 0 评论 -
SpringMVC原理学习(二)参数解析器
初步了解 RequestMappingHandlerAdapter 的调用过程控制器方法被封装为 HandlerMethod准备对象绑定与类型转换准备 ModelAndViewContainer 用来存储中间 Model 结果解析每个参数值解析参数依赖的就是各种参数解析器,它们都有两个重要方法supportsParameter 判断是否支持方法参数resolveArgument 解析方法参数常见参数的解析省略 @RequestParam@Value。原创 2022-11-09 14:24:31 · 1690 阅读 · 0 评论 -
SpringMVC原理学习(一)RequestMappingHandlerMapping 与 RequestMappingHandlerAdapter
/ 例如经常需要用到请求头中的 token 信息, 用下面注解来标注由哪个参数来获取它@Target(ElementType.PARAMETER) // 注解位置:方法参数上@Retention(RetentionPolicy.RUNTIME) // 注解作用范围:运行期}// 与 @ResponseBody 注解功能类似,不过返回的是 yml 格式的字符串@Target(ElementType.METHOD) // 注解位置:方法上。原创 2022-11-09 11:08:53 · 1519 阅读 · 0 评论 -
Spring原理学习(八)AOP底层实现
ProxyFactory 是用来创建代理的核心实现,用 AopProxyFactory 选择具体代理实现注意:要区分上面提到的 MethodInterceptor,它与之前 CGLIB 中用的的 MethodInterceptor 是不同的接口底层切点实现是如何匹配的:调用了 aspectj 的匹配方法,比较关键的是它实现了 MethodMatcher 接口,用来执行方法的匹配。aspectj 切点的局限性:只能匹配方法的信息。原创 2022-11-07 20:00:08 · 1591 阅读 · 0 评论 -
Spring原理学习(七)JDK动态代理与CGLIB代理底层实现
编译器也能修改 class 实现增强编译器增强能突破代理仅能通过方法重写增强的限制:可以对构造方法、静态方法等实现增强为什么有这么麻烦的一套东西呢?避免反射,提高性能,代价是一个代理类配两个 FastClass 类,代理类中还得增加仅调用 super 的一堆方法用编号处理方法对应关系比较省内存,另外,最初获得方法顺序是不确定,这个过程没法固定死与JDK动态代理相比,CGLIB代理类数目相对较少,只有两个类。而JDK动态代理在调用到第十七次后会生成代理类去优化为非反射调用,并且是一个方法对应一个代理类。原创 2022-11-05 21:13:27 · 1671 阅读 · 3 评论 -
Spring原理学习(六)Scope
在当前版本的 Spring 和 Spring Boot 程序中,支持五种 Scopesingleton,容器启动时创建(未设置延迟),容器关闭时销毁prototype,每次使用时创建,不会自动销毁,需要调用 DefaultListableBeanFactory.destroyBean(bean) 销毁request,每次请求用到此 bean 时创建,请求结束时销毁session,每个会话用到此 bean 时创建,会话结束时销毁。原创 2022-11-03 20:04:18 · 482 阅读 · 0 评论 -
Spring原理学习(五)初始化与销毁
学习目标:Spring 提供了多种初始化和销毁手段它们的执行顺序。原创 2022-11-03 20:01:49 · 492 阅读 · 0 评论 -
Spring原理学习(四)Aware 接口
Java 配置类包含 BeanFactoryPostProcessor 的情况,因此要创建其中的 BeanFactoryPostProcessor 必须提前创建 Java 配置类,而此时的 BeanPostProcessor 还未准备好,导致 @Autowired 等注解失效。例如下面这个例子:你会发现用 Aware 注入 ApplicationContext 成功,而 @Autowired 注入 ApplicationContext 失败要想生效就得加处理器。配置类MyConfig1。原创 2022-11-03 19:59:53 · 4794 阅读 · 1 评论 -
Spring原理学习(三)BeanFactory后处理器
ComponentScan, @Bean, @Mapper 等注解的解析属于核心容器(即 BeanFactory)的扩展功能这些扩展功能由不同的 BeanFactory 后处理器来完成,其实主要就是补充了一些 bean 定义。原创 2022-11-03 14:41:45 · 600 阅读 · 0 评论 -
Spring原理学习(二)Bean的生命周期与Bean后处理器
排序器基类,实现了Comparator,排序规则仅支持PriorityOrdered、Ordered,不支持@Order。:继承自OrderComparator,在OrderComparator排序的基础上,增加了对排序类的@Order注解的支持,但是若既实现Ordered接口,又有@Order注解时,则优先从接口实现中获取值。实现原理主要还是覆写了OrderComparator#findOrder,增加了从注解中获取order的方法。Ordered。原创 2022-11-02 12:04:40 · 356 阅读 · 0 评论 -
Spring原理学习(一)容器接口与容器实现
不会主动调用 BeanFactory 后处理器不会主动添加 Bean 后处理器不会主动初始化单例不会解析beanFactory 还不会解析 ${ } 与 #{ }bean 后处理器会有排序的逻辑学到了什么?常见的 ApplicationContext 容器实现内嵌容器、DispatcherServlet 的创建方法、作用。原创 2022-11-01 17:14:57 · 887 阅读 · 0 评论