当前位置: 首页 > news >正文

12306项目学习笔记(框架篇Base)

首先学习的是基础框架

ApplicationContextHolder

ApplicationContextHolder提供了一种静态方式来访问Spring容器中的Bean,适用于某些特定场景,如工具类和框架集成。

在12306项目中由于我们引入了RocketMQ消息队列,这些库的对象通常不是Spring管理的,无法直接使用@Autowired注入,所以需要ApplicationContextHolder类提供一种静态方式来访问Spring容器中的Bean。

比如在我们的TicketServiceImpl中的bean对象就是用以下方法获取的

@Override
public void run(String... args) throws Exception {
    ticketService = ApplicationContextHolder.getBean(TicketService.class);
}

ApplicationBaseAutoConfiguration

这个类是 Spring Boot 的自动配置类,使用了 @Configuration 注解,负责定义一些基础的 Bean。

  • ApplicationContextHolder: 这个 Bean 用于获取 Spring 应用上下文,可以通过静态方法方便地访问容器中的其他 Bean。
  • ApplicationContentPostProcessor: 这个 Bean 在应用启动完成后会执行,主要用于发布自定义事件 ApplicationInitializingEvent,可以用于初始化操作。
  • FastJsonSafeMode: 这个 Bean 在配置文件中启用 fastjson 的安全模式,确保 JSON 解析的安全性。

ApplicationContentPostProcessor

这个类实现了 ApplicationListener<ApplicationReadyEvent> 接口,表示它会监听 Spring 应用的启动事件。

  • executeOnlyOnce: 使用 AtomicBoolean 确保事件只会被处理一次,避免重复操作。
  • onApplicationEvent: 当应用准备就绪时,会发布一个自定义事件 ApplicationInitializingEvent,可以在其他地方监听这个事件进行初始化操作。

ApplicationInitializingEvent

这是一个自定义事件类,继承自 ApplicationEvent。它用于在应用准备完成后发布特定的初始化事件,其他组件可以监听这个事件以执行相关的逻辑。

这个类主要是为了去初始化一些策略匹配模式,整个项目只有抽象策略选择  器 AbstractStrategyChoose监听了ApplicationInitializingEvent。

比如前端发送不同的信息以此匹配不同的处理方法,比如学生票和成人票不同的价格计算方式,以及支付方式所调用的不同接口。

FilterOrderConstant

这个类定义了一些常量,用于在过滤器中定义执行顺序。USER_TRANSMIT_FILTER_ORDER 常量可以帮助确保用户信息传递过滤器在合适的顺序中执行。

  • 过滤器链执行:在请求处理过程中,Servlet 容器会按照过滤器的注册顺序依次调用所有已注册的过滤器。每个过滤器的 doFilter 方法会被执行。

Singleton

这是一个单例模式的实现类,使用 ConcurrentHashMap 来存储单例对象。

  • get: 根据键名获取单例对象。
  • put: 将对象放入容器中,支持根据键名放入。
  • get(String key, Supplier<T> supplier): 如果对象不存在,可以通过提供的 Supplier 创建并存储对象。

解决了spring bean在多线程环境下的线程安全问题。

相关文章:

  • nginx部署前端vue项目步骤
  • 【微信小程序】Mobx--绑定多个 store 以及命名空间
  • HarmonyOS ArkUI工程框架解析
  • SQL 快速参考
  • 算法day17|如何求普通二叉树的众数
  • 滑模控制2021年12月8日
  • 【Python零基础】Python测试
  • ASP.NET Core 入门教学五 集成日志
  • OpenCV小练习:身份证号码识别
  • 【Android】使用 ADB 查看 Android 设备的 CPU 使用率
  • es的简易dsl语句
  • ESP32利用大模型做聊天机器人
  • 2024年最强网络安全学习路线,详细到直接上清华的教材!
  • 【软考】磁盘的类型
  • 构建Spring Boot应用的微服务服务依赖管理
  • Jenkins服务安装配置
  • NoSql数据库 - Redis Cluster集群详解及案例实现
  • linux 云主机 pip 安装配置 letsencrypt certbot 为多个域名生成免费 https 证书实录
  • 小实战项目-第二章2.1-IIC协议讲解? 什么是软件IIC 什么是硬件IIC 有什么区别如何编写代码--这章节主要讲解软件IIC,下一章节讲解硬件IIC协议
  • SpringBoot-读取配置文件方式
  • 国铁集团郑州局预计“五一”发送642.5万人
  • 上海开花区域结果,这项田径大赛为文旅商体展联动提供新样本
  • 石家庄:城市更新,生活向美
  • 五一假期如何躺赚利息?来看国债逆回购操作攻略
  • 体坛联播|安切洛蒂预计执教巴西国家队,利拉德确诊跟腱撕裂
  • 李祥翔评《孔子哲学思微》︱理性秩序与美学秩序的碰撞