2022年第一天
2021年很快的过去了,这一年发生了一些不少的事情,也明白了一些事情。
2021年工作方面查看了一些框架的源码,包括spring、springmvc、springcloud、netty、mybatis、shiro、xxl-job 等框架源码,理解程度80%吧。 通过阅读源码,大致了解到每个框架的设计原则以及基于spring扩展组件的大体思路-在对象后置处理器或者对象工厂后置处理器做一些操作,动态的向容器注册一些bean。
spring 核心的ioc、aop 等源码,也包括对象的生命周期。 ioc的开始是在对象工厂的refresh 方法,对于springboot 项目,默认的对象工厂是org.springframework.context.annotation.AnnotationConfigApplicationContext , 在启动过程中调用refresh 会调用到父类org.springframework.context.support.AbstractApplicationContext#refresh 开始其IOC的过程。 refresh 方法中finishBeanFactoryInitialization 会调用getBean生成所有非lazy 的单例对象,也就是对象的生命周期开始进行。其中IOC 重要的一步是生成BeanDefinition 对象,然后最后遍历BeanDefinition 对象,生成bean缓存到map 中。 AOP实际是在对象的后置处理器判断是否有适用的AOP MethodInteceptor(org.aopalliance.intercept.MethodInterceptor), 如果有则生成代理对象,代理对象需要维护一个org.springframework.aop.framework.CglibAopProxy.DynamicAdvisedInterceptor, 以这里为入口进行AOP。其实对于AspectJ 语法的AOP, 也是走的Spring 的AOP机制(基于MethodIntecepor、Pointcut、PointcutAdvisor),只不过是封装成AspectJ 特有的相关Bean, 参考: org.springframework.aop.aspectj.AspectJExpressionPointcut。
其他像SpringMVC、OpenFeign、Shiro、xxl-job 等都是利用Spring 的可扩展性进行操作,都是在对象后置处理器或者对象工厂后置处理器,拦截带有指定注解的Bean, 生成代理对象注入到容器中,代理对象中做相关的业务逻辑。
2021年生活方面报了一个培训班,很感谢培训班的每一位同学对自己的肯定,和他们在一起学习真的没有任何压力,仿佛回到大学时期。接下来,自己也会定期复习自己在培训班学习的内容。
2022 年自己还有好多要学的,主要是kafka、rocketmq、k8s 三大块的学习任务。剩下就是再多学习一些Java 之外的go语言之类的。