1、代码复用
在一些系统中,例如add是业务层接口方法,语义上表示“新增”。add强调新增动作,而save可能隐含“创建或更新”的双重语义(如Upsert操作)。通过分层命名,对外暴露清晰的业务意图:
public Drf add(Drf drf) {
return save(drf); // 其中,save是另外一个方法
}
实际功能委托给save方法执行,自身仅作为调用入口。
目的
代码复用:若系统中存在统一保存逻辑(如事务控制、日志记录),save可被多个方法(如add、update)复用,避免重复代码。
扩展灵活性:未来若新增逻辑(如校验、通知),只需修改save,无需改动add的调用方。
2、Idea调用方法排查,以及其在前后端项目中的局限
在idea中,如果要查谁调用了这个方法,或者这个方法调用了谁,可以用以下方式:
快捷键 Ctrl + Alt + H(Windows/Linux)
操作:光标定位到方法名 → 按下快捷键 → 弹出 Call Hierarchy 窗口。
效果:
- 分层展示调用链:Callers(谁调用了该方法)和 Callees(该方法调用了谁)。
- 支持展开层级,点击节点跳转到源码。
除此以外,以下快捷键可以快速定位方法被哪些类直接引用。
快捷键 Alt + F7
操作:选中方法名 → 按 Alt + F7→ 弹出 Find Usages 面板。
效果:
- 列出所有直接调用该方法的位置(类、文件、行号),双击快速跳转。
- 支持按模块、范围过滤。
局限性
在费控系统中,可以找到一些没有被任何类调用的控制层方法。他们其实是系统的 HTTP 入口,属于action包的控制层方法:
前端Vue --HTTP--> Action层(如本方法) --调用--> Service层
调用规则:控制层方法不会被其他Java代码调用,而是
- 被SpringMVC的路由机制映射。
- 直接接收HTTP请求。
- 向下调用Service层(如IBillSubtypeService)。
所以,用快捷键是查不到的。
3、SpringMVC中的接口
细化定义:通过@RequestMapping(或@GetMapping/@PostMapping)注解将HTTP请求映射到Java方法,形成一个可访问的URL端点,提供远程调用入口,允许前端通过HTTP请求触发后端业务逻辑。
前端请求:通过URL(例如 /api/subtypes?my_name=123)触发。
参数解析:Spring自动将查询参数注入方法参数(my_id, my_name, my_keywords)。
业务处理:调用Service层查询数据库,返回业务功能结果。
响应封装:将数据包装为RestVO<泛型>格式(含状态码code、消息msg、数据data)。
4、后端接收数据并返回的全过程
Action中介接收前端雇主的特制弹药(参数)
Action将弹药装进Drf弹夹,得到装好的弹夹(实体对象,业务查询的参数载体)
Action收回弹夹,将其交给Service猎人
Service用弹夹里的弹药装填SQL枪支(拼接查询)
向Database(数据库)森林开枪射击
捡回猎物(原始数据)封装进Page背包
把Page背包交给Action中介
Action将背包塞进RestVO快递箱
快递员Spring MVC将箱子送往雇主(前端),前端接收RestVO,展示给用户
5、通过开发者模式寻找Api接口的前端按钮
使用Network面板的Initiator追踪(最直接方法)
捕获目标请求
打开开发者工具(F12)→ 切换到 Network 标签 → 刷新页面或执行操作触发接口调用。
在请求列表中找到目标API接口,点击该请求记录。查看发起源(Initiator)
在请求详情面板中,切换到 Initiator 标签页:
调用栈(Call Stack):显示从按钮点击到发起请求的完整代码链路。关键定位点:
查找栈中带有 .click、addEventListener 或 onClick 等事件关键词的条目。
点击栈中的文件名(如 app.js:102),自动跳转到 Sources 面板的对应代码位置。