首页 > 编程语言 >又一本让人醍醐灌顶的好书《架构探险:从零开始写Java Web框架》

又一本让人醍醐灌顶的好书《架构探险:从零开始写Java Web框架》

时间:2024-10-30 16:35:16浏览次数:5  
标签:本书 Web Java 反射 醍醐灌顶 代理 线程 注解

我最初是在《码农翻身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

相关文章

  • jmeter java.security.NoSuchProviderException: JCE cannot authenticate the provid
    背景:需要用jmeter调用jar包,加解密的,jar包放到extras里,脚本调用发现会报标题的错误尝试:1.修改jdk版本,以为是jdk版本不兼容,从1.8.0-0184升级到1.8.0-034期间还配置了环境变量 结果:依然报错; 2.指定jmeter使用jdk版本在jmeter.bat中加入setJAVA_HOME=D:\ProgramFiles\Jav......
  • Javaweb 实验6 JSP内置对象
    我发现了有些人喜欢静静看博客不聊天呐,但是ta会点赞。这样的人呢帅气低调有内涵,美丽大方很优雅。说的就是你,不用再怀疑哦目的:掌握JSP内置对象的使用。理解JSP的作用域掌握JSP的表达式使用实验要求:完成实验题目要求提交实验报告,将代码和实验结果页面截图放入报告中第......
  • 【2024华为OD-E卷-200分-任务最优调度】(题目+思路+Java&C++&Python解析+在线测试)
    在线评测链接题目内容给定一个正整数数组表示待系统执行的任务列表,数组的每一个元素代表一个任务,元素的值表示该任务的类型。请计算执行完所有任务所需的最短时间。任务执行规则如下:任务可以按任意顺序执行,且每个任务执行耗时间均为111个时间单位两个同类型的......
  • java Date类使用讲解
    怀旧网个人博客地址:怀旧网,博客详情:javaDate类使用讲解1.Date类的概述:​java.util.Date类,表示一个日期和时间,内部精确到毫秒2.Date类中的构造方法:​publicDate():创建当前系统时间对应的日期对象​publicDate(longdate):创建以标准基准时间为基准指定偏移毫秒数,对应时......
  • Java如何获取随机数
    引言1. java.util.Random 类1.1基本用法1.2优点1.3缺点2. Math.random() 方法2.1基本用法2.2优点2.3缺点3. ThreadLocalRandom 类3.1基本用法3.2优点3.3缺点4.应用场景5.总结引言在Java编程中,生成随机数是一个常见的需求,无论是用于模拟、测......
  • Java编程语言:从入门到精通
    Java是一种广泛使用的高级编程语言,由SunMicrosystems在1995年发布,后来被Oracle公司收购。Java以其“一次编写,到处运行”(WriteOnce,RunAnywhere)的理念而闻名,成为企业级应用开发、Android应用开发和大数据处理等领域的重要工具。二、Java的发展历程1991年:SunMicros......
  • NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备在内网播放WebRTC流,显示一直加载中是
    在科技日新月异的今天,各行各业都在经历着前所未有的变革。视频监控技术,作为安全防范体系的重要组成部分,更是随着技术的演进不断升级,以适应更加复杂多变的安全需求。NVR录像机汇聚管理EasyNVR,作为一款集视频流处理、录像存储、分发管理等功能于一体的综合性视频监控云平台,正是这......
  • 【JavaScript】之浏览器对象模型(BOM)详解
    浏览器对象模型(BOM:BrowserObjectModel)是JavaScript的一部分,它允许你与浏览器窗口进行交互。不同于DOM(文档对象模型)主要处理网页内容,BOM关注的是浏览器窗口本身及其各种特性,例如导航、窗口大小、浏览器历史记录等等。就是JavaScript将浏览器的各个组成部分封装成了对......
  • 【JavaEE】【多线程】定时器
    目录一、定时器简介1.1Timer类1.2使用案例二、实现简易定时器2.1MyTimerTask类2.2实现schedule方法2.3构造方法2.4总代码2.5测试一、定时器简介定时器:就相当于一个闹钟,当我们定的时间到了,那么就执行一些逻辑。1.1Timer类Java的标准库中提供了在java.ut......
  • JavaScript 实现对 JSON 对象数组数据进行分页处理
    JavaScript实现对JSON对象数组数据进行分页处理在前端JavaScript中对JSON对象数组进行分页,可以通过以下方式实现:分页函数示例代码假设有一组JSON对象数据,比如一组用户信息:constdata=[{id:1,name:"Alice"},{id:2,name:"Bob"},{id:3,name:"......