Spring之我见
文章平均质量分 93
从源码级记录Spring内部流程,让自己能吃透Spring
葵续浅笑
争取每天都有进步!
展开
-
spring之我见 - 从 RefreshScope 理解IOC的世界不仅仅只有单例
从 getBean 讲起getBean 方法是我们的老朋友,在里面有一个细节我们可能会忽略。spring ioc 针对不同的 bean 管理模式有不同的执行策略,而我们最常见熟知的就是单例和原型,下面就是在创建bean的时候首先根据不同的管理策略执行不同的逻辑方法,而我们今天要讲的是比较少走的else逻辑部分。if (mbd.isSingleton()) { ...}else if (mbd.isPrototype()) { .....}else {原创 2021-09-30 18:05:06 · 302 阅读 · 0 评论 -
spring之我见 - Ribbon如何在RestTemplate起作用(SmartInitializingSingleton)
还是IOC的知识 – Ribbon是何时塞入RestTemplate中的ribbon是一个客户端侧的负载均衡器,如果你使用 restTemplates 和 eureka, ribbon会将url中的 服务名 直接转换成请求的ip, 而 restTemplates 内部有一个 interceptors list(拦截器),让 ribbon 有地方可以施展拳脚. 那么在spring启动的时候,是什么时候把 ribbon 塞进 restTemplates 的拦截器中的呢?public abstract c原创 2021-07-15 18:09:02 · 297 阅读 · 0 评论 -
spring之我见 - Spring AOP实现原理(下)
预备材料这一篇需要先把我本地的demo应用代码放出来。然后上篇说到, 我们已经准备好了各种食材,这一篇真正开始看看 AOP 是怎么代理某个对象的.@Aspect@Componentpublic class TestAspectJ { @Pointcut("execution(* com.example.demo.service.TestService.test())") public void testPointcut() { } @Before("testPoi原创 2021-06-02 18:22:31 · 327 阅读 · 1 评论 -
spring之我见 - Spring AOP实现原理(上)
前言以前写过一篇文章, 专门讲了spring的动态代理实现原理 从代理模式再出发!Proxy.newProxyInstance的秘密, 这一次我们探究下动态代理模式比较重量级的应用 – Spring AOP 的源码实现. 本文重在讲主流程, 为了让流程更清楚, 本篇会补上很多Spring IOC 的知识.spring-boot-starter-aop 的启用 - ConfigurationClassPostProcessorConfigurationClassPostProcessor的由来都知道要原创 2021-05-19 14:49:49 · 341 阅读 · 1 评论 -
@Transactional内部的秘密
我们都知道Transactional是通过aop实现的,这里介绍一下更底层的代码原理,我们直接从AnnotationAwareAspectJAutoProxyCreator这个类开始分析, 也就是说当一个服务类的某个方法带上了@Transactional时,这个类是如何帮助生成代理类的.AnnotationAwareAspectJAutoProxyCreator 的继承图如下图所示,我们可以看到它本质是一个BeanPostProcessor,BeanPostProcessor 会在对象初始化的前后,对对象原创 2020-07-21 17:04:53 · 852 阅读 · 0 评论 -
spring之我见- spring循环依赖为啥是三级缓存?
单例在spring里的获取方式今天讲一下spring中针对单例bean的循环依赖问题,本着追本溯源的学习理念,我们要先知道单例在spring中怎么管理的。spring获取实例都通过beanfactory的getBean方法获取实例,顺着代码而下,在doGetBean方法(AbstractBeanFactory)中,单例总是通过getSingleton()方法获取缓存实例。protected &...原创 2020-03-06 15:35:34 · 2391 阅读 · 1 评论 -
代理模式及FactoryBean的实际运用--Mybatis Mapper文件的华丽转身
Mybatis的Mapper我们很熟悉,我们只需要提供sql和一个接口,其余与数据库的交互全部交给了Mybatis解决,但是,mapper文件我们只提供一个接口,这个接口是怎么和spring结合完成我们预期的要求?FactoryBean一般情况下,Spring通过反射机制利用的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在中提供大...原创 2019-03-06 11:01:48 · 3326 阅读 · 0 评论 -
spring之我见--从Filter机制看设计模式(责任链模式,装饰器模式)
最近为公司一个项目写一个简单的网关,其实也就是一个filter做一些token解析/校验。但是光这一个filter就不简单,现在就说说里面运用的设计模式。Filter的核心-责任链模式Filter: 属于javaweb中一个重要的组件,对请求资源进行处理(request和response)。FilterChain: 管理着所有filter的顺序和执行,就像一个链条。通过这种链式串联,我们就...原创 2019-02-16 16:53:29 · 3845 阅读 · 1 评论 -
spring之我见--spring boot的组件化(以logging日志初始化为例)
之前写了java的多级缓存,是一个简单的util工具包,想着能不能跟springboot 做集成,顺便了解下spring boot 组件原理,比如众多的 xx-spring-boot-starter.这篇文章以 spring boot 2.x为基础。如何读取配置文件这个是面临的第一个问题,以logging 日志的集成为例。我们都知道logging日志的配置可以配置以"logging.leve...原创 2019-01-03 21:45:33 · 2493 阅读 · 0 评论 -
《Spring In Action》 读书笔记(5) -- @autowire,@Qualifier减少xml配置
Instruments.java 创建乐器接口package spring.ioc04;public interface Instruments { public void play();}Cello.java 大提琴package spring.ioc04;public class Cello implements Instruments { @Override pu原创 2016-07-01 15:15:22 · 714 阅读 · 0 评论 -
《Spring In Action》 读书笔记(4) -- SpEL表达式的简单应用
SpEL是我看这本书第一个比较兴奋的地方,因为以前还不知道spring有表达式,它可以让spring的装配不用全是固定的数据。但是SpEL表达式的演示代码全部敲出来又很多,就选取了两种比较重要的情况。第一种是可以调用静态方法作为装配的属性值。 第二种是可以调用Spring上下文中bean的值或方法。原创 2016-06-21 16:17:44 · 459 阅读 · 0 评论 -
《Spring In Action》 读书笔记(3) -- factory-method的应用
因为单例类的特殊性,spring对于单例类的注入提供了factory-method属性。原创 2016-06-21 15:01:53 · 460 阅读 · 0 评论 -
《Spring In Action》 读书笔记(2) -- bean装配
接上一篇property的用法property标签内部的属性也是ref和value,跟 constructor-arg用法无异,所以这里结合 集合 装配来说 property标签跟 constructor-arg 区别在于 后者是找构造方法,前者是找类的字段。先上代码先写一个Instruments(乐器)接口package spring.ioc03;public interface Instrum原创 2016-06-15 16:01:14 · 351 阅读 · 0 评论 -
《Spring In Action》 读书笔记(1) -- bean装配
这是我第一本java类的书,在学SSH的时候,感觉spring是最没用的,然而现在实习快一年了,现在才发现spring的精妙,决定看本书来更了解下spring,这两天学习bean装配,别看内容简单,其实平常做项目的时候xml配置是很少用到的(项目搭建的时候xml配置基本上都配置好了,以后都不会动),所以导致自己配的时候往往错误很多。 constructor-arg的用法 先定义一个Juggler接原创 2016-06-15 10:55:32 · 434 阅读 · 0 评论 -
spring之我见--Controller注册到DispatchServlet请求处理(下)
1 DispatcherServlet请求分发1.1 DispatcherServlet的初始化在web.xml文件里,跟ContextLoaderListener形影不离的应该就是DispatcherServlet了,它一般做如下定义:servlet> servlet-name>dispatcherservlet-name> servlet-c原创 2018-01-28 15:46:18 · 1307 阅读 · 0 评论 -
spring之我见--Controller注册到DispatchServlet请求处理(上)
对应上一章 《spring之我见–从spring的启动到ioc容器的创建》今天我们探讨一下Springmvc的工作原理,Springmvc的核心是Controller请求部分,所以我们的探讨从Controller被注册开始,到Controller如何被请求的。1.Controller注册前的准备工作1.1 refresh()上一章我们知道IOC容器是在ContextLoaderLi原创 2018-01-27 18:41:33 · 2257 阅读 · 1 评论 -
spring之我见--从spring的启动到ioc容器的创建
spring是JAVA人可能用的最多的框架之一,我也很遗憾在面试时不止一次被问到spring原理问题时而语塞,也下定决心开了新的一个专题,spring之我见,用“之我见”三个字是为了严谨,因为读源码对于我来说不是简单的活儿,搞不好就是理解错误,所以自我勉励吧。从spring启动谈起spring 和 spring boot 在启动上还是有区别的,这篇文章我是以spring4.3为准绳。原创 2018-01-26 09:03:28 · 365 阅读 · 0 评论