随笔分类 - 2_Spring源码研究
摘要:.
阅读全文
摘要:前言: 在这之前我们已经建立请求和Controller方法的映射集合,接下来我们就要去取出映射关系里获取请求的逻辑实例。 根据请求查找对应的Controller方法的流程主要发生在DispatcherServlet类的doDispatch()方法。该方法的调用时机是当我们访问路径:http://lo
阅读全文
摘要:前言: 在使用SpringMVC的时候有没有想过,为什么在controller类的方法上,添加一个@RequestMapping("/toIndex")注解的时候,从浏览器的输入localhost:8080/toIndex请求就可以到达指定的controller方法呢? 接下来我们就开始讲Reque
阅读全文
摘要:SpringMVC大致脉络图: RequestProcessorChain: 参照的是之前学习Spring的时候经常遇到的责任链模式的后置处理器。该类中保存了RequestProcessor的多个实现类,之所以会有多个不同的实现类是因为DispatcherServlet是项目中所有请求的唯一入口,这
阅读全文
摘要:AdvisorAdapter关系图: MethodBeforeAdviceAdapter:该类提供getInterceptor()方法,将传递过来的advisor给调用getAdvice()方法获取到对应的advice然后强转为MethodBeforeAdvice类型。最后将其包装成MethodBe
阅读全文
摘要:前言: 由于动态代理对象的创建并不需要也不会去干预bean的实例化、属性赋值、初始化。而初始化结束才意味着bean被创建完成,因此Spring会等到bean初始化之后,也就是执行完.invokeInitMethods()方法。才会将相关的横切逻辑织入到bean里。Spring的横切逻辑主要放在了初始
阅读全文
摘要:横切逻辑的加载与解析: 即Aspect和Advice的加载阶段,在后续创建动态代理的时候, 根据之前开发自研框架AOP的经验,需要拿着所有的Aspect去尝试与容器的业务Bean去做匹配,只有匹配的Aspect才会去创建对应的动态代理,SpringAOP也不例外。 而进行匹配前势必要把IOC容器所有
阅读全文
摘要:AutoProxyCreator的关系图: 观察类图,我们可以看到AbstractAutoProxyCreate实现了Aware接口,BeanFactoryAware接口使之拥有容器的能力,BeanClassLoaderAware接口使之用于Bean类加载器的能力。 实现AopInfrastruct
阅读全文
摘要:前言: 为什么在启动类加上@EnbleAspectJAutoProxy就能支持AOP @EnableAspectJAutoProxy 首先我们跟入到源码中,进入到@EnbleAspectJAutoProxy类中,我们可以发现它有两个成员属性 proxyTargetClass: 表明该类采用CGLIB
阅读全文
摘要:BeanPostProcessor: BeanPostProcessor:Bean后置处理器 BeanPostProcessor是Spring IOC容器给我们提供的一个扩展接口。接口声明如下: public interface BeanPostProcessor { //bean初始化方法调用前被
阅读全文
摘要:前言 容器是OOP的高级工具: 以低耦合低侵入的方式打通从上到下的开发通道 按部就班填充代码逻辑实现业务功能,每层逻辑都可无缝替换 OOP将业务程序分解成各个层次的对象,通过对象联动完成业务 无法很好地处理分散在各业务里的通用系统需求 系统需求 码农才去关系的需求 添加日志信息:为每个方法添加统计时
阅读全文
摘要:该方法在AbstractAutowireCapableBeanFactory类中的doCreateBean方法中有使用到 populateBean方法大致流程图: (1)对Bean进行判空逻辑 (2)在设置属性前去修改Bean状态,也可以控制是否继续给Bean设置属性值(如果Bean不是Spring
阅读全文
摘要:Spring中的单例循环依赖解决 我们声明了两个类(A、B),两个类中的成员变量相互引用:然后在Spring中就会产生循环依赖(A依赖B,B依赖A)。 1 @Component 2 public class GirlFriend { 3 @Autowired 4 private BoyFriend
阅读全文
摘要:前言: createBean是创建Bean的主要方法 该方法位于:AbstractBeanFactory的doGetBean方法中的createBean调用、 createBean方法流程图: createBean源码解析: protected Object createBean(String be
阅读全文
摘要:doGetBean方法: 该方法位于 -> AbstractApplicationContext.refresh() -> AbstractApplicationContext.finishBeanFactoryInitialization(ConfigurableListableBeanFacto
阅读全文
摘要:本章节目录: Spring 的 依 赖 注 入 前言: Spring为了实现Bean的生命周期控制,同时也考虑到Spring或者用户在实例化Bean的每个过程阶段中可能对Bean的行为进行定制化改变。 因此Bean的设计是极其复杂的。(Spring在Bean实例的创建过程中做了很多精细化控制) 本章
阅读全文
摘要:事 件 监 听 器 模 式 监听器将监听感兴趣的事件,一旦事件发生,便做出响应 其涉及到的三个组件: 事件源(Event Source) 事件监听器(Event Listener) 事件对象(Event Object) 代码演示: 创建Event(事件类) @Getter @Setter publi
阅读全文
摘要:本章节目录: (一)后 置 处 理 器 PostProcessor (二)Aware 接 口 及 其 子 接 口 (三)事 件 监 听 器 模 式 (四)Refresh 方 法 源 码 详 解 (一)后 置 处 理 器 PostProcessor PostProcessor: 本身也是一种需要注册到
阅读全文
摘要:前言: 在这之前Spring已经通过document对象解析出BeanDefinition实例 以下就是将BeanDefinition注册进容器的步骤 在DefaultBeanDefinitionDocumentReader 类中的 processBeanDefinition()方法完成了对Bean
阅读全文
摘要:模板方法模式 围绕抽象类,实现通用逻辑,定义模板结构,部分逻辑由子类实现: 1.复用代码 2.反向控制
阅读全文