Skip to content

Latest commit

 

History

History
33 lines (26 loc) · 2.25 KB

File metadata and controls

33 lines (26 loc) · 2.25 KB

旅行社行程定制系统 (Travel Agency System) - IoC 与 AOP 实践

这是一个基于 Java 反射技术实现的轻量级 IoC (控制反转)AOP (面向切面编程) 的旅行社行程定制系统模拟。

项目亮点

  • IoC 支持:通过 BeanFactory 动态加载和配置 Vehicle (交通工具) 和 Hotel (酒店),无需在代码中硬编码具体实现类。
  • AOP 支持:支持在不修改业务代码的情况下,通过 Interceptor (拦截器) 增加额外功能(如:保险购买、自动开票、操作日志)。
  • 高扩展性:遵循“开闭原则”,新增交通工具或酒店只需添加类并配置属性,无需改动现有逻辑。

交互流程

  1. 选择交通工具:用户从配置的列表中选择(如 Plane, Car, Bus)或选择不使用。
  2. 选择酒店:用户选择住宿(如 HiltonHotel)或选择不使用。
  3. 打印行程:系统自动完成资源创建,并在核心业务执行前后触发 AOP 增强逻辑(保险、发票等)。

如何扩展

1. 新增交通工具(或酒店)演示

如果需要增加一种交通工具 Bus

  • 步骤 1:在 com.example.travel 包下创建 Bus.java 实现 Vehicle 接口。
  • 步骤 2:在 src/main/resources/travel.propertiesvehicle.options 属性后添加该选项: vehicle.options=..., Bus:com.example.travel.Bus
  • 结果:重新运行程序,交互界面将自动出现 Bus 选项,且自动享有通用的拦截器功能。

2. 新增 AOP 功能(拦截器)演示

如果需要为酒店增加一个 LoggerInterceptor 日志功能:

  • 步骤 1:创建类 com.example.travel.LoggerInterceptor 实现 Interceptor 接口。
  • 步骤 2:在 travel.properties 中修改 hotel.interceptorshotel.interceptors=com.example.travel.InvoiceInterceptor,com.example.travel.LoggerInterceptor
  • 结果:调用酒店的 unPack 方法时,会自动先执行日志记录。

技术架构说明

  • BeanFactory: 负责解析 travel.properties 并利用 Class.forName().newInstance() 进行 IoC 容器模拟。
  • AopInvocationHandler: 利用 JDK 动态代理实现 InvocationHandler,对目标对象(Target)的方法调用进行职责链增强。