Skip to content

Latest commit

 

History

History
94 lines (83 loc) · 3.99 KB

File metadata and controls

94 lines (83 loc) · 3.99 KB

Controller注解类方法调用关系查询语句

1. 查询所有Controller注解类及其方法

MATCH (c:Class)-[:CONTAINS]->(m:Method)
WHERE c.annotations CONTAINS 'RestController' OR c.annotations CONTAINS 'Controller'
RETURN c.name as class_name, c.full_name as class_full_name, c.annotations as class_annotations,
       m.name as method_name, m.signature as method_signature, m.id as method_id
ORDER BY c.name, m.name

2. 查询Controller类的方法调用关系

MATCH (caller:Method)-[:CALLS]->(callee:Method)
WHERE caller.id IN $method_ids
MATCH (caller)-[:CONTAINS]-(caller_class:Class)
MATCH (callee)-[:CONTAINS]-(callee_class:Class)
WHERE caller_class.annotations CONTAINS 'RestController' OR caller_class.annotations CONTAINS 'Controller'
RETURN caller_class.name as caller_class, caller.name as caller_method,
       callee_class.name as callee_class, callee.name as callee_method,
       caller.signature as caller_signature, callee.signature as callee_signature
ORDER BY caller_class.name, caller.name

3. 查询Controller类的完整调用链(多层调用)

MATCH (caller:Method)-[:CALLS*1..5]->(callee:Method)
WHERE caller.id IN $method_ids
MATCH (caller)-[:CONTAINS]-(caller_class:Class)
MATCH (callee)-[:CONTAINS]-(callee_class:Class)
RETURN caller_class.name as start_class, caller.name as start_method,
       collect({callee_class: callee_class.name, callee_method: callee.name, depth: length(shortestPath((caller)-[:CALLS*1..20]->(callee)))}) as call_chain
ORDER BY start_class, start_method

4. 查询Controller类的调用统计

MATCH (caller:Method)-[:CALLS]->(callee:Method)
WHERE caller.id IN $method_ids
MATCH (caller)-[:CONTAINS]-(caller_class:Class)
MATCH (callee)-[:CONTAINS]-(callee_class:Class)
RETURN caller_class.name as controller_class,
       count(DISTINCT caller) as method_count,
       count(*) as total_calls,
       collect(DISTINCT callee_class.name) as called_classes
ORDER BY total_calls DESC

5. 查询Controller类的循环依赖

MATCH path = (caller:Method)-[:CALLS*2..10]->(caller)
WHERE caller.id IN $method_ids
MATCH (caller)-[:CONTAINS]-(caller_class:Class)
RETURN caller_class.name as class_name, caller.name as method_name,
       length(path) as cycle_length,
       [n in nodes(path) | (n)-[:CONTAINS]-(class:Class) | class.name + "." + n.name] as cycle_path

6. 查询Controller类调用的外部服务

MATCH (caller:Method)-[:CALLS]->(callee:Method)
WHERE caller.id IN $method_ids
MATCH (caller)-[:CONTAINS]-(caller_class:Class)
MATCH (callee)-[:CONTAINS]-(callee_class:Class)
WHERE NOT (caller_class.annotations CONTAINS 'RestController' OR caller_class.annotations CONTAINS 'Controller')
RETURN caller_class.name as controller_class, caller.name as controller_method,
       callee_class.name as service_class, callee.name as service_method,
       callee_class.annotations as service_annotations
ORDER BY controller_class.name, controller_method

7. 查询Controller类的HTTP端点映射

MATCH (c:Class)-[:CONTAINS]->(m:Method)
WHERE c.annotations CONTAINS 'RestController' OR c.annotations CONTAINS 'Controller'
AND m.annotations IS NOT NULL
RETURN c.name as class_name, m.name as method_name, m.annotations as method_annotations
ORDER BY class_name, method_name

使用说明

  1. 基本Controller类查询: 使用查询1获取所有Controller类及其方法
  2. 方法调用关系: 使用查询2获取Controller方法之间的直接调用关系
  3. 多层调用链: 使用查询3获取完整的调用链,可以调整深度参数
  4. 统计分析: 使用查询4获取调用统计信息
  5. 循环依赖检测: 使用查询5检测可能的循环依赖
  6. 外部服务调用: 使用查询6查看Controller调用的外部服务
  7. HTTP端点: 使用查询7查看Controller的HTTP映射注解

参数说明

  • $method_ids: Controller方法的ID列表,可以从查询1结果中获取
  • 深度参数: *1..5 表示1到5层的调用深度,可以根据需要调整