我最初是在《码农翻身2》上了解到《架构探险:从零开始写Java Web框架》这本书的,刘伟老师在书中提到,这本书在他早期学习时对他帮助很大。因此,我也购买了这本书来学习。 这本书主要介绍了如何自己编写一个Web框架,使其达到类似于简化版Spring的效果。作者尽量使用基础工具包,并以通俗易懂的方式逐步展开内容。虽然该书于2015年出版,但其内容依然具有很高的实用价值。网络上的一些评论称它为“框架启蒙书”,我认为这个评价非常准确。阅读这本书确实让人眼界大开,豁然开朗。我强烈推荐大家读一读。
主要思路和知识点梳理 1. 实现IOC特性 目标:实现类似以下代码的功能:
@Action
public class UserAction {
@Inject
private UserService userService;
}
核心步骤:
1).管理Bean:使用一个Map<Class<?>, Object> BEAN_MAP来管理所有的Bean。这涉及到类的扫描(如Class.forName)、注解的创建与获取(如isAnnotationPresent),以及类反射(如newInstance和invoke)。
2).依赖注入:通过反射获取含有指定注解的属性,并通过反射初始化这些属性(如field.setAccessible和field.set)。
2. 实现统一请求转发
目标:将请求URL与实际执行方法关联起来。
核心步骤:
1).映射请求:将请求URL与实际执行方法存储在一个Map中,通过反射获取含有指定注解的方法(如getDeclaredMethods),并解析注解属性(如method.getAnnotation)。
2).统一入口:DispatcherServlet作为统一入口,负责初始化BEAN_MAP和请求转发Map,并通过反射调用实际方法(如method.invoke)。
3. 实现AOP特性
目标:支持面向切面编程。
核心步骤:
1).动态代理技术:使用CGLIB库进行动态代理。
2.)代理链:可能有多个切面,因此需要一个代理链(Chain)。如果链长度大于1,则继续代理对象。
3).管理代理对象:将代理后的对象放入BEAN_MAP中。
4. ThreadLocal的原理
功能:ThreadLocal用于存放线程局部变量,确保线程安全并隔离不同线程之间的数据。
应用场景:如果你的变量需要在不同的线程之间隔离,可以考虑使用ThreadLocal。
上面的几个知识点并不能代表此书给人的启发,我强烈建议大家阅读原书,以便更深入地理解和掌握这些概念。
标签:本书,Web,Java,反射,醍醐灌顶,代理,线程,注解
From: https://www.cnblogs.com/hichanglong/p/18516049