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

综合网站模板新网站如何做网站优化

综合网站模板,新网站如何做网站优化,网站搭建和网页设计,房产公司网站模板前言 首先说明观察者模式#xff0c;观察者模式#xff0c;也叫发布-订阅模式#xff0c;应该是用来处理对象间的一对多依赖关系的。当被观察者的状态变化时#xff0c;所有依赖它的观察者都会得到通知并自动更新。 观察者模式的结构#xff0c;通常包括Subject#xff0…前言 首先说明观察者模式观察者模式也叫发布-订阅模式应该是用来处理对象间的一对多依赖关系的。当被观察者的状态变化时所有依赖它的观察者都会得到通知并自动更新。 观察者模式的结构通常包括Subject主题和Observer观察者两个主要角色。Subject维护一个观察者列表提供注册和移除的方法还有通知观察者的方法。Observer则有一个更新方法当Subject状态变化时被调用。可能还有具体的ConcreteSubject和ConcreteObserver实现具体的业务逻辑。 Spring框架中有很多地方用到了观察者模式特别是事件驱动模型。比如ApplicationEvent和ApplicationListener用户自定义事件然后通过ApplicationContext发布事件监听器会接收到这些事件进行处理。这是典型的观察者模式的应用。 需要详细说明Spring中的事件机制。ApplicationEvent是所有事件的父类自定义事件需要继承它。ApplicationListener是观察者接口实现onApplicationEvent方法来处理事件。ApplicationContext作为事件发布者有publishEvent方法。当事件发布时所有注册的监听该事件类型的监听器都会被触发。 另外Spring的事件传播机制可能涉及到同步和异步处理。默认是同步的但可以通过配置实现异步监听比如使用Async注解或者配置TaskExecutor。 还涉及Spring内置的一些事件比如ContextRefreshedEvent、ContextStartedEvent等这些事件在容器生命周期不同阶段发布监听器可以响应这些事件执行相应逻辑。 在本文中会结合源码分析ApplicationContext的publishEvent方法内部如何获取监听器如何调用他们的onApplicationEvent方法。可能涉及到ApplicationEventMulticaster这个类它负责管理监听器和事件广播。具体实现类SimpleApplicationEventMulticaster使用线程池支持异步事件处理。 其中Spring中的观察者模式与传统观察者模式的区别比如Spring使用ApplicationContext作为事件发布者而传统模式可能由Subject直接维护观察者列表。此外Spring支持基于注解的事件监听比如EventListener简化了监听器的注册和使用。 学完本篇可以在项目中使用观察者模式比如通过自定义事件和监听器实现解耦的业务逻辑。比如订单创建后发送邮件通知可以定义一个OrderCreatedEvent监听器处理发送邮件的逻辑这样订单服务和邮件服务就解耦了。 还需要注意可能的问题比如监听器的执行顺序异常处理异步监听时的线程池配置等。这些都是实际使用中需要考虑的。 总结来说回答需要分两部分观察者模式的原理包括结构、角色和流程然后是Spring中的具体实现结合事件机制和源码分析说明如何利用ApplicationEvent、ApplicationListener以及相关类来实现观察者模式并给出实际应用示例。 观察者模式原理详解及 Spring 源码应用分析 一、观察者模式Observer Pattern原理 核心思想定义对象间的一对多依赖关系当一个对象被观察者/主题状态发生改变时所有依赖它的对象观察者会自动收到通知并更新。 别名发布-订阅模式Pub-Sub。 1. 模式结构 角色职责Subject主题维护观察者列表提供注册、移除和通知观察者的方法。Observer观察者定义更新接口用于接收主题状态变化的通知。ConcreteSubject具体主题实现状态变更逻辑并在状态变化时通知所有观察者。ConcreteObserver具体观察者实现更新逻辑以响应主题状态变化。 2. 类图 ---------------- ---------------- | Subject | | Observer | ---------------- ---------------- | attach(Observer)| ------| update():void | | detach(Observer)| ---------------- | notify() | ^ ---------------- |^ || | ---------------- ------------------ | ConcreteSubject | | ConcreteObserver | ---------------- ------------------ | getState() | | update() | | setState() | ------------------ ----------------3. 执行流程 观察者注册ConcreteObserver 调用 Subject.attach() 注册到主题。状态变更触发通知ConcreteSubject 调用 setState() 修改状态后触发 notify()。广播通知Subject 遍历观察者列表调用每个观察者的 update() 方法。 二、Spring 源码中的观察者模式实现 Spring 通过 事件驱动模型 实现观察者模式核心涉及以下组件 ApplicationEvent所有事件的基类如 ContextRefreshedEvent。ApplicationListener观察者接口监听特定事件。ApplicationEventPublisher主题接口用于发布事件由 ApplicationContext 实现。ApplicationEventMulticaster事件广播器管理监听器并分发事件。 1. Spring 事件机制核心流程 1. 定义事件 → 2. 发布事件 → 3. 监听器处理事件2. 源码解析 1事件发布ApplicationContext.publishEvent() 入口AbstractApplicationContext#publishEvent 流程 public void publishEvent(ApplicationEvent event) {getApplicationEventMulticaster().multicastEvent(event); // 广播事件// 若父容器存在递归向上传播事件if (this.parent ! null) {this.parent.publishEvent(event);} }2事件广播ApplicationEventMulticaster 实现类SimpleApplicationEventMulticaster 关键方法multicastEvent() public void multicastEvent(ApplicationEvent event) {for (ApplicationListener? listener : getApplicationListeners(event)) {// 判断是否支持异步执行Executor executor getTaskExecutor();if (executor ! null) {executor.execute(() - invokeListener(listener, event));} else {invokeListener(listener, event); // 同步调用监听器}} }private void invokeListener(ApplicationListener listener, ApplicationEvent event) {listener.onApplicationEvent(event); // 触发监听器逻辑 }3监听器注册与匹配 注册Spring 容器启动时自动扫描所有实现 ApplicationListener 的 Bean。匹配规则通过 supportsEventType() 检查监听器是否支持当前事件类型。 示例GenericApplicationListener 判断事件类型 public boolean supportsEventType(ResolvableType eventType) {return (this.delegate this || this.delegate.supportsEventType(eventType)); }3. Spring 内置事件示例 事件类型触发时机ContextRefreshedEvent容器初始化或刷新完成时所有 Bean 已加载。ContextStartedEvent调用 ConfigurableApplicationContext.start() 时。ContextStoppedEvent调用 ConfigurableApplicationContext.stop() 时。RequestHandledEventHTTP 请求处理完成后。 三、Spring 观察者模式的实际应用 1. 自定义事件与监听器 步骤 定义事件继承 ApplicationEvent。定义监听器实现 ApplicationListener 或使用 EventListener 注解。发布事件通过 ApplicationContext.publishEvent() 发布。 代码示例 // 1. 自定义事件 public class OrderCreatedEvent extends ApplicationEvent {private String orderId;public OrderCreatedEvent(Object source, String orderId) {super(source);this.orderId orderId;}public String getOrderId() { return orderId; } }// 2. 监听器实现注解方式 Component public class EmailNotificationListener {EventListenerpublic void handleOrderCreatedEvent(OrderCreatedEvent event) {System.out.println(发送邮件通知订单ID: event.getOrderId());} }// 3. 发布事件 Service public class OrderService {Autowiredprivate ApplicationContext applicationContext;public void createOrder(String orderId) {// 业务逻辑...applicationContext.publishEvent(new OrderCreatedEvent(this, orderId));} }2. 异步事件处理 配置异步监听器 Configuration EnableAsync public class AsyncConfig implements AsyncConfigurer {Overridepublic Executor getAsyncExecutor() {return Executors.newFixedThreadPool(5);} }// 使用 Async 注解异步处理 Component public class LoggingListener {AsyncEventListenerpublic void asyncLogOrderEvent(OrderCreatedEvent event) {System.out.println(异步记录日志订单ID: event.getOrderId());} }3. 监听器执行顺序 通过 Order 注解控制监听器执行顺序 EventListener Order(1) public void firstListener(OrderCreatedEvent event) {System.out.println(第一个执行); }EventListener Order(2) public void secondListener(OrderCreatedEvent event) {System.out.println(第二个执行); }四、Spring 观察者模式的设计优势 解耦业务逻辑 事件发布者与监听者无需直接交互例如订单服务不依赖邮件服务。扩展性强 新增监听器只需实现接口或添加注解无需修改发布者代码。支持异步处理 通过 TaskExecutor 实现异步事件处理提升系统吞吐量。事件传播机制 支持事件在容器层次结构中向上传播如父子容器。 五、总结 观察者模式核心解耦主题与观察者通过事件通知机制实现松耦合通信。Spring 实现基于 ApplicationEvent、ApplicationListener 和 ApplicationEventMulticaster 构建事件驱动模型。应用场景 业务流程解耦如订单创建后发送通知、记录日志。系统生命周期管理如容器启动后加载缓存。异步任务触发如消息队列事件处理。 源码设计亮点 事件类型匹配通过 ResolvableType 动态解析事件类型支持泛型事件。灵活广播策略SimpleApplicationEventMulticaster 支持同步/异步事件分发。注解驱动简化EventListener 和 Async 简化监听器定义与异步配置。
http://www.dnsts.com.cn/news/196158.html

相关文章:

  • 互助平台网站建设网页翻译用什么软件
  • 域名网站这么做网络工程师报考入口
  • 做面料哪个网站好网站优化基本技巧
  • 建工网校app移投界seo
  • 义乌营销型网站建设wordpress 相册形式
  • 织梦网站主页wordpress点击文章跳转外站
  • wordpress建设网站的方法北京建站免费模板
  • 工商注册网站模板福鼎建设局网站
  • 网站的基本组成部分有哪些内容网址地址查询
  • 企业网站硬件建设方案微信开发者工具是什么
  • 招聘网站开发人员电商企业网站建设的一般要素有哪些
  • 东莞免费做网站ipv6网站如何做
  • 网站ui用什么做网站里宣传视频怎么做
  • 如何做网站投放广告做一套小程序设计多少钱
  • 青岛网站建设公司怎么选购买域名和服务器
  • 网站开发前端指什么本地企业网站建设
  • 网站首页引导页模版做网站含营销
  • seo百度网站排名软件个人网站需要备案吗
  • 网上书店电子商务网站建设适合个人做的跨境电商
  • 三亚做网站多少钱如何自学跨境电商
  • 安国网站建设服务器时间 wordpress
  • 怎么自己制作一个网站的书源搜索引擎排名优化公司
  • 专题学习网站模板网站建设优化服务效果
  • 网站营销推广方案怎么做网站相册
  • 整个网站全部乱码wordpress 加盟主题
  • 高端个人网站网站建设收费标准流程
  • 有哪些做特卖的网站网站建设什么代码最简单
  • cent安装wordpressseo方法
  • 意大利设计网站ui界面设计作品模板
  • 行业网站建设深圳公司申请建设部门网站的报告