Java工程师面试框架篇(三)
框架篇面试通常从 反射 / 注解 打底,再问 ORM、Hibernate、Struts2、Spring IOC/AOP、Spring MVC 和 MyBatis。下面按这个顺序把原图和配置示例留下来,方便对着图回忆调用链。
一、框架基础:反射与注解
Java 本身不是动态语言,要「运行时才决定用哪个类、哪个方法」,靠的是反射。细节可看 反射笔记。

创建对象的常见路子(面试常问):
-
new语句。 -
工厂方法,例如 String.valueOf()。 -
反射:Class 的三种拿法,或 newInstance()。 -
clone()。 -
反序列化: ObjectInputStream.readObject()。
注解能少写不少样板。JDK 自带和第三方都有,用法见 注解笔记。

二、ORM 与 Hibernate
ORM 是 Object/Relationship Mapping。面向对象写出来的对象,最终要进关系库;若每处手写 SQL,换库、分页、移植都疼。ORM 想让你尽量用对象思维,少把 SQL 散落在业务里。
-
不同库 SQL 方言不一样(T-SQL 能跑的,PL-SQL 未必能)。 -
同一功能实现不同,分页就是典型。 -
程序绑死 SQL,扩展和维护都难。
Hibernate 是 Java 里开源的 ORM:对 JDBC 做轻量封装,最终仍走 JDBC;相对 EJB 那种重量级规范,它更轻,夹在数据库和业务之间当持久层。
HQL 里 from 是必须的,可以没有 select。常用属性:cascade 管级联,inverse 指定谁维护关联。
三、Struts2
Struts 是成熟的 MVC Web 框架。工作原理和目录结构见 这篇。
动态方法调用

① 指定 method 属性:
② 感叹号方式(需打开动态方法调用):
③ 通配符:多个 method 时 method="{1}{2}...",同时改 name 为 _*_*...,并配好 <result>。
访问 Servlet API:

拦截器:执行 Action 前先跑拦截器,多个就按顺序;全部过完才进业务;返回 Result 匹配视图后,拦截器再反向走一遍,最后响应客户端。

四、Spring:IOC、AOP 与事务
Spring 是轻量级 IOC + AOP 容器:体积和开销都小,用控制反转松耦合,用切面把日志、事务、安全从业务里拆出去,并管对象的配置和生命周期。

-
业务对象进容器。 -
按配置元数据生产系统需要的对象。 -
用的时候直接从容器拿。
AOP 靠预编译(AspectJ)或运行期动态代理(JDK / CGLib,也就是 Spring AOP、JBoss AOP)做统一维护:日志、性能、安全、事务、异常。


五、Spring MVC
Spring MVC 是前端控制器形态。静态概念:请求经 DispatcherServlet 分到 Controller,产出 Model,再经 DispatcherServlet 交给 View。

动态概念:DispatcherServlet 本身是 Servlet,拦住 Request → HandlerMapping 找出 Controller 和拦截器 → 打成 HandlerAdapter 链条 → Controller 返回 ModelAndView → ViewResolver 解析出 View → 模型进视图完成渲染。

拦截器工作流:

六、MyBatis 与 OGNL
MyBatis 同样是开源 ORM,但偏「半自动」:支持普通 SQL、存储过程、高级映射,把大量 SQL 抽到配置文件里灵活改。


| 对比 | Hibernate | MyBatis |
|---|---|---|
| 自动化 | 全自动,封装库结构、全套映射 | 半自动,面对的是纯粹 Java 对象 |
| SQL | 运行期自动生成 | 不自动生成,SQL 写在配置里 |
一句话总结:框架面试先问反射/注解怎么撑起动态和少样板,再问 ORM 为什么要存在;Hibernate 全自动生成 SQL,MyBatis 半自动把 SQL 外置;Struts2 拦截器夹 Action,Spring 用 IOC 装对象、AOP 横切、MVC 靠 DispatcherServlet 把请求拆成 Handler 和视图。
转载请注明来源:Java工程师面试框架篇(三)








