fall_core_main 0.0.1 copy "fall_core_main: ^0.0.1" to clipboard
fall_core_main: ^0.0.1 copied to clipboard

Fall Core Main - Runtime components for Fall Core framework. Provides AOP services, hooks system and dependency injection utilities.

Fall Core Main #

Fall Core 框架的运行时核心模块,提供 AOP 执行引擎和依赖注入工具。

Pub Version License: MIT

📦 模块介绍 #

fall_core_main 是 Fall Core 框架的运行时核心模块,提供了完整的 AOP(面向切面编程)执行引擎、Hook 系统和依赖注入工具。它与代码生成器协作,为 Flutter 应用提供企业级的架构支持。

✨ 特性 #

  • 🎯 AOP 执行引擎:完整的面向切面编程运行时支持
  • 🪝 Hook 系统:Before、After、Around、Throw 四种 Hook 类型
  • 💉 依赖注入工具:与 GetX 深度集成的注入工具
  • 🔍 上下文传递:完整的方法调用上下文支持
  • 高性能:基于代理模式的高效方法拦截
  • 🛡️ 异常处理:专用的异常切面处理机制
  • 📊 内置日志:完整的日志切面支持
  • 🎛️ Hook 过滤:基于白名单的 Hook 过滤机制

🪝 Hook 系统 #

Hook 类型 #

BeforeHook - 前置通知

在目标方法执行前调用:

import 'package:fall_core_main/fall_core_main.dart';

class LoggingHook implements BeforeHook {
  @override
  String get name => 'logging';
  
  @override
  void onBefore(HookContext context) {
    print('🚀 开始执行: ${context.targetClassName}.${context.methodName}');
    print('📝 参数: ${context.arguments}');
  }
}

AfterHook - 后置通知

在目标方法执行后调用:

class ResultLogHook implements AfterHook {
  @override
  String get name => 'result_logging';
  
  @override
  void onAfter(HookContext context, dynamic result) {
    print('✅ 执行完成: ${context.methodName}');
    print('📊 返回值: $result');
  }
}

AroundHook - 环绕通知

完全包围目标方法的执行:

class TimingHook implements AroundHook {
  @override
  String get name => 'timing';
  
  @override
  dynamic execute(HookContext context, Function() proceed) {
    final stopwatch = Stopwatch()..start();
    print('⏰ 开始计时: ${context.methodName}');
    
    try {
      final result = proceed(); // 调用目标方法
      return result;
    } finally {
      stopwatch.stop();
      print('⏱️ 执行耗时: ${stopwatch.elapsedMilliseconds}ms');
    }
  }
}

ThrowHook - 异常通知

在方法抛出异常时调用:

class ErrorHandlingHook implements ThrowHook {
  @override
  String get name => 'error_handling';
  
  @override
  void onThrow(HookContext context, dynamic exception, StackTrace stackTrace) {
    print('❌ 方法执行异常: ${context.methodName}');
    print('🐛 异常信息: $exception');
    
    // 可以进行错误上报、日志记录等
    _reportError(context, exception, stackTrace);
  }
  
  void _reportError(HookContext context, dynamic exception, StackTrace stackTrace) {
    // 错误上报逻辑
  }
}

Hook 执行顺序 #

sequenceDiagram
    participant Client as 客户端
    participant Proxy as AOP代理
    participant Around as AroundHook
    participant Before as BeforeHook
    participant Target as 目标方法
    participant After as AfterHook
    participant Throw as ThrowHook
    
    Client->>Proxy: 调用方法
    Proxy->>Around: execute()
    Around->>Before: onBefore()
    Before-->>Around: 返回
    Around->>Target: 执行目标方法
    
    alt 正常执行
        Target-->>Around: 返回结果
        Around->>After: onAfter()
        After-->>Around: 返回
        Around-->>Proxy: 返回结果
        Proxy-->>Client: 返回结果
    else 异常情况
        Target-->>Around: 抛出异常
        Around->>Throw: onThrow()
        Throw-->>Around: 返回
        Around-->>Proxy: 重新抛出异常
        Proxy-->>Client: 抛出异常
    end

🎯 AOP 服务 #

AopService - AOP 执行引擎 #

import 'package:fall_core_main/fall_core_main.dart';

void main() {
  // 获取AOP服务实例
  final aopService = AopService.instance;
  
  // 注册各种Hook
  aopService.addBeforeHook(LoggingHook());
  aopService.addAfterHook(ResultLogHook());
  aopService.addAroundHook(TimingHook());
  aopService.addThrowHook(ErrorHandlingHook());
  
  // 启动应用
  runApp(MyApp());
}

执行 AOP 方法 #

class PaymentServiceAop extends PaymentService {
  @override
  Future<bool> processPayment(double amount) {
    return AopService.instance.executeAop<Future<bool>>(
      target: this,
      methodName: 'processPayment',
      arguments: [amount],
      proceed: () => super.processPayment(amount),
      allowedHooks: ['logging', 'timing', 'error_handling'],
    );
  }
}

💉 依赖注入工具 #

InjectUtil - 注入工具 #

import 'package:fall_core_main/fall_core_main.dart';

class OrderService {
  late UserService userService;
  late PaymentService paymentService;
  
  void initializeDependencies() {
    // 注入单个依赖
    InjectUtil.inject<UserService>(
      null, // 无名称,使用类型注入
      (service) => userService = service,
    );
    
    // 注入命名依赖
    InjectUtil.inject<PaymentService>(
      'primaryPayment', // 指定名称
      (service) => paymentService = service,
    );
  }
}

服务注册 #

void registerServices() {
  // 通过生成器自动生成,示例:
  Get.lazyPut<UserService>(() => UserService());
  Get.put<PaymentService>(PaymentService(), tag: 'primaryPayment');
}

🔍 Hook 上下文 #

HookContext - 执行上下文 #

class CustomHook implements BeforeHook {
  @override
  String get name => 'custom';
  
  @override
  void onBefore(HookContext context) {
    // 访问目标对象
    final target = context.target;
    
    // 访问方法信息
    final className = context.targetClassName;
    final methodName = context.methodName;
    
    // 访问方法参数
    final arguments = context.arguments;
    
    // 自定义处理逻辑
    print('调用 $className.$methodName, 参数: $arguments');
  }
}

📊 内置 Hook #

LogHooks - 内置日志 Hook #

import 'package:fall_core_main/fall_core_main.dart';

void setupLogging() {
  final aopService = AopService.instance;
  
  // 添加内置日志Hook
  aopService.addBeforeHook(LogHooks.methodEntry());
  aopService.addAfterHook(LogHooks.methodExit());
  aopService.addThrowHook(LogHooks.methodError());
}

内置日志Hook提供:

  • 方法入口日志
  • 方法退出日志
  • 异常日志
  • 参数和返回值记录
  • 性能统计

🛠️ 高级功能 #

Hook 过滤 #

@Service()
@Aop(allowedHooks: ['logging', 'timing']) // 只允许这两个Hook
class SensitiveService {
  void processData() {
    // 只有logging和timing Hook会被执行
  }
}

条件执行 #

class ConditionalHook implements BeforeHook {
  @override
  String get name => 'conditional';
  
  @override
  void onBefore(HookContext context) {
    // 根据条件决定是否执行
    if (context.methodName.startsWith('secure')) {
      // 只对安全方法执行
      _performSecurityCheck(context);
    }
  }
  
  void _performSecurityCheck(HookContext context) {
    // 安全检查逻辑
  }
}

异步支持 #

class AsyncHook implements AroundHook {
  @override
  String get name => 'async';
  
  @override
  dynamic execute(HookContext context, Function() proceed) async {
    // 前置异步处理
    await _beforeAsync(context);
    
    try {
      final result = proceed();
      
      // 如果结果是Future,等待完成
      if (result is Future) {
        final actualResult = await result;
        await _afterAsync(context, actualResult);
        return actualResult;
      } else {
        await _afterAsync(context, result);
        return result;
      }
    } catch (e) {
      await _errorAsync(context, e);
      rethrow;
    }
  }
  
  Future<void> _beforeAsync(HookContext context) async { /* ... */ }
  Future<void> _afterAsync(HookContext context, dynamic result) async { /* ... */ }
  Future<void> _errorAsync(HookContext context, dynamic error) async { /* ... */ }
}

🚀 快速开始 #

1. 安装 #

dependencies:
  fall_core_base: ^0.0.1
  fall_core_main: ^0.0.1
  get: ^4.7.2

2. 初始化 #

import 'package:fall_core_main/fall_core_main.dart';

void main() {
  // 初始化AOP服务
  _setupAOP();
  
  // 注册服务(由代码生成器生成)
  AutoScan.registerServices();
  
  // 注入依赖(由代码生成器生成)
  AutoScan.injectServices();
  
  runApp(MyApp());
}

void _setupAOP() {
  final aopService = AopService.instance;
  
  // 注册Hook
  aopService.addBeforeHook(LoggingHook());
  aopService.addAfterHook(ResultLogHook());
  aopService.addAroundHook(TimingHook());
  aopService.addThrowHook(ErrorHandlingHook());
}

3. 使用示例 #

@Service()
@Aop(allowedHooks: ['logging', 'timing'])
class UserService {
  Future<User> getUser(String id) async {
    // 此方法会被AOP增强
    await Future.delayed(Duration(milliseconds: 500));
    return User(id: id, name: 'John Doe');
  }
}

@Service()
class UserController {
  @Auto()
  late UserService userService;
  
  Future<void> handleGetUser(String id) async {
    final user = await userService.getUser(id);
    print('获取到用户: ${user.name}');
  }
}

🐛 故障排除 #

常见问题 #

  1. Hook 未执行

    • 检查是否正确注册了Hook
    • 确认AOP代理类被正确使用
    • 验证allowedHooks配置
  2. 依赖注入失败

    • 确保调用了registerServices()
    • 检查服务是否正确注册到GetX
    • 验证注入时机
  3. 性能问题

    • 减少Hook数量和复杂度
    • 使用异步Hook时注意性能
    • 合理使用Hook过滤

🔗 相关模块 #

📄 许可证 #

本项目采用 MIT 许可证

🤝 贡献 #

欢迎提交 Issue 和 Pull Request!


Fall Core Main - 强大的运行时AOP和DI引擎 🚀

0
likes
135
points
158
downloads

Publisher

unverified uploader

Weekly Downloads

Fall Core Main - Runtime components for Fall Core framework. Provides AOP services, hooks system and dependency injection utilities.

Repository (GitHub)
View/report issues

Topics

#aop #dependency-injection #hooks #runtime #services

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

fall_core_base, flutter, get, logger

More

Packages that depend on fall_core_main