spring 的监听器

Spring Boot中使用监听器(笔记) Spring Boot中使用监听器(笔记)1.监听器介绍2. Spring Boot中监听器的使用web 监听器的使用场景很多,比如监听 servlet 上下文用来初始化一些数据、监听 http session 用来获2.1 监听Servlet上下文对象监听 servlet 上下文对象可以用来初始化数据,用于缓存。什么意思呢?我举一个很常见的场景,比如2.3 监听客户端请求Servlet Request对象 1.监听器介绍 什么是 web 监听器?web 监听器是一种 Servlet 中特殊的类,它们能帮助 阅读详情

1. Spring 事件和监听器的基本概念

1.1 事件(Event)

在Spring中,事件是ApplicationEvent的子类。ApplicationEvent 是Spring事件机制的基础,任何继承自 ApplicationEvent 的类都可以作为事件发布。事件通常用于在应用程序中发生某些特定操作(如用户注册、订单创建等)时,通知系统的其他部分执行相应的操作。

1.2 监听器(Listener)

监听器是ApplicationListener接口的实现类,用于监听特定类型的事件。当监听器检测到感兴趣的事件发生时,它会自动执行相应的处理逻辑。开发者可以根据业务需求定义多个监听器,监听不同类型的事件。

2. Spring 事件机制的工作原理

Spring 的事件机制主要由以下几个部分组成:

  1. 事件源:产生事件的对象。在Spring中,事件通常是由应用程序的某个组件触发的,例如用户操作、系统状态变化等。
  2. 事件:继承自 ApplicationEvent 的事件类。事件类封装了事件源和事件信息。
  3. 事件监听器:实现 ApplicationListener 接口的类。监听器注册到应用上下文后,监听器可以监听并处理特定的事件。
  4. 事件发布者:通过 ApplicationEventPublisher 发布事件。Spring 中的 ApplicationContext 是一个 ApplicationEventPublisher,可以发布事件。

3. 创建和使用 Spring 监听器

3.1 定义自定义事件

首先,我们需要定义一个自定义事件类,继承自 ApplicationEvent。

import org.springframework.context.ApplicationEvent;

public class CustomEvent extends ApplicationEvent {
    private String message;

    public CustomEvent(Object source, String message) {
        super(source);
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

这个 CustomEvent 类封装了事件源和一个消息,表示事件发生时携带的信息。

3.2 定义事件监听器

接下来,我们需要定义一个监听器类,继承 ApplicationListener 接口,并实现 onApplicationEvent 方法来处理事件。

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class CustomEventListener implements ApplicationListener<CustomEvent> {

    @Override
    public void onApplicationEvent(CustomEvent event) {
        System.out.println("Received custom event - " + event.getMessage());
    }
}

这个 CustomEventListener 类监听 CustomEvent 类型的事件,并在事件触发时打印事件携带的消息。

3.3 发布事件

我们需要在应用程序的某个地方发布事件。可以使用 ApplicationEventPublisher 来发布事件。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;

@Component
public class CustomEventPublisher {

    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;

    public void publishEvent(String message) {
        System.out.println("Publishing custom event...");
        CustomEvent customEvent = new CustomEvent(this, message);
        applicationEventPublisher.publishEvent(customEvent);
    }
}

这个 CustomEventPublisher 类通过 ApplicationEventPublisher 发布自定义事件。发布时,它会创建一个 CustomEvent 对象并发布。

3.4 使用 Spring Boot 进行集成测试

在 Spring Boot 中,我们可以创建一个简单的测试来验证监听器的工作:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class EventTestRunner implements CommandLineRunner {

    @Autowired
    private CustomEventPublisher customEventPublisher;

    @Override
    public void run(String... args) throws Exception {
        customEventPublisher.publishEvent("Hello, Spring Event!");
    }
}

当Spring Boot 应用程序启动时,EventTestRunner 会自动运行,并发布一个自定义事件。CustomEventListener 会捕获并处理该事件。

3.5 运行程序并查看结果

启动Spring Boot应用程序后,控制台会输出如下信息:

Publishing custom event...
Received custom event - Hello, Spring Event!

这表明事件已经成功发布,并且监听器已经捕获并处理了该事件。

4. Spring 事件机制的应用场景

Spring 的事件机制非常灵活,可以应用于各种场景:

  1. 解耦业务逻辑:通过事件机制,可以将核心业务逻辑与其他功能(如日志记录、通知、监控等)解耦。例如,用户注册后发送欢迎邮件,可以通过事件通知的方式实现。

  2. 异步处理:Spring 的事件机制可以与异步处理结合使用,通过异步监听器实现事件的异步处理,从而提高系统的响应速度和吞吐量。

  3. 系统监控与通知:通过事件机制,可以在系统发生重要变化(如配置更新、异常捕获、状态变更等)时发布事件,并通过监听器进行监控和通知。

5. 高级应用:异步事件处理

在某些情况下,事件处理可能是一个耗时操作,我们可以将事件处理任务异步化,以提高系统的性能。Spring 提供了异步事件处理的支持,只需在监听器上使用 @Async 注解即可。

首先,确保在Spring Boot应用中启用了异步支持:

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;

@Configuration
@EnableAsync
public class AsyncConfig {
}

然后,修改监听器类,添加 @Async 注解:

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

@Component
public class CustomEventListener implements ApplicationListener<CustomEvent> {

    @Async
    @Override
    public void onApplicationEvent(CustomEvent event) {
        System.out.println("Received custom event asynchronously - " + event.getMessage());
    }
}

通过这种方式,事件的处理将在线程池中异步执行,不会阻塞主线程。

6. 总结

Spring 监听器是处理事件的一种有效机制,能够帮助开发者在事件驱动的架构中实现松耦合的设计。通过事件和监听器的结合,可以在应用程序中灵活地处理各种事件,并且可以选择同步或异步处理,以满足不同的性能需求。

通过本文的示例和解释,开发者应该对如何定义、发布和监听事件有了清晰的理解,并能够在实际项目中应用这些技术来优化系统的架构和性能。Spring 事件机制是一个强大的工具,能够有效提高系统的扩展性和灵活性。

Spring Boot 整合——Spring batch的监听器 关于版本 依赖 版本 springboot 2.4.0 spring batch 2.4.0 代码地址 因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码。全部的代码在这里: https://gitee.com/daifyutils/springboot-samples。 此篇文章所属模块为:base-batch-2.4.0 目录地址 目录 测试目录 内容 dai.samples.batch.allowstart dai.sa 阅读详情

相关推荐

Spring Boot 监听器详解

SpringApplicationRunListener 是SpringApplication 的运行监听器,提供Spring Boot启动时各个运行状态的监听,可以在应用程序启动的时候执行一些自定义操作或记录一些信息。SpringApplicationRunListener 在run中加载。是Spring 提供的上下文监听器,可用于监听指定感兴趣的事件。最后还是用一张图来总结整个流程作者其他文章:Prometheus 系列文章Prometheus 的介绍和安装。

分享技术干货和灵感、推荐新书和好玩的项目、分享Java面试题 8818

Spring监听器用法与原理详解(带ApplicationListener模型图)

相信大家都或多或少知道Spring中的监听器,有些人还能说出它采用了观察者模式,但其实它还用到了适配器模式工厂模式等。当然,仍有不少人是完全不了解Spring的监听及其机制的,本次我们就来深入学习一下Spring监听器观察者模式(Observer Pattern)是一种行为设计模式,它用于在对象之间建立一对多的依赖关系。在该模式中,当一个对象的状态发生变化时,它会自动通知其依赖对象(称为观察者),使它们能够自动更新主题对象维护一个观察者列表,并提供方法用于添加和删除观察者。当主题的状态发生变化时,它会。

战斧的博客 1万+

SpringBoot 事件发布监听机制使用、分析、注意点 (一篇到位)

事件发布监听机制使用、分析、注意点

默默不代表沉默 1万+

Spring监听器

事件监听概念 应用程序事件允许我们发送和接收特定事件,我们可以根据需要处理这些事件。事件用于在松散耦合的组件之间交换信息。由于发布者和订阅者之间没有直接耦合,因此可以在不影响发布者的情况下修改订阅者,反之亦然。 事件监听三要素 事件源:事件对象的产生者,任何一个事件都有一个来源 ApplicationEvent 事件监听器:事件框架或组件收到一个事件后,需要通知所有相关的事件监听器来进行处理。这些监听器统一存储在事件监听器注册表中。 ApplicationListener(编码式事件监听器) @Event

骑个小蜗牛的博客 1万+

从平面到立体:一张图看懂MOSFET、FinFET到GAAFET的演变史(附结构对比图)

本文深入解析了半导体晶体管从平面MOSFET到三维FinFET,再到全环绕栅极GAAFET的技术演进历程。通过结构对比图和物理原理分析,揭示了每一次创新如何解决短沟道效应等关键挑战,推动芯片性能提升。特别关注GAAFET作为最新技术突破的架构特点和性能优势。

weixin_30892037的博客 699

Unsloth Desktop 本地大模型微调量化实战指南

大语言模型的本地化定制正在成为开发者与内容创作者的重要需求,而微调与量化则是其中最关键的两项技术。LoRA 与 QLoRA 通过仅训练少量低秩矩阵,大幅降低显存占用和训练成本,让消费级 GPU 也能完成模型适配;GGUF 格式则打通了训练与推理的边界,使微调后的模型可直接接入 Ollama、llama.cpp 等主流推理引擎。本文以 Unsloth Desktop 为切入对象,从其底层加速原理出发,梳理了环境准备、模型加载、对话测试、量化导出、微调验证及 API 批量调用的完整链路,并针对显存优化、端口冲突

weixin_29055137的博客 399

Servlet监听器和Spring监听器

1.Servlet监听器 ServletContext、HttpSession、ServletRequest的监听都是通过javax.servlet 包下定义的,他们都是servlet的特性,换句话说,他们不依赖于Spring,而依赖于web容器(tomcat容器),他们的加载优先于Spring容器 Servlet监听器有用处,但是没有Spring监听器用的多,用的方便;并且通常可以用HttpServletRequest和HttpServletResponse实现相同的需求 Servlet监听器提供了很多

ZJH 1478

4位无符号比较器设计

4位无符号比较器设计

好好学习,天天向上 7891

Spring监听器Listener

Spring 监听器(Listener)用于监听应用程序中的事件,并在事件发生时执行特定操作。常见的事件包括应用启动、关闭、请求处理等。Spring 提供了多种监听器接口,例如ApplicationListener、ServletRequestListener、HttpSessionListener等,开发者可以通过实现这些接口或者添加对应的注解来监听和处理事件。创建自定义事件类,自定义事件类需要继承ApplicationEvent。

GM_115的博客 1143

新手福利!大龙虾OpenClaw可视化管理工具来了!告别命令行,这个可视化工具让OpenClaw管理变得超简单

还在用命令行管理OpenClaw?🚀 这个跨平台可视化工具支持14+AI模型,一键切换,还能对接微信飞书钉钉等8大消息渠道,让AI助手管理变得简单直观 ✅ 暗色主题护眼舒适,Rust后端高性能低占用,新手也能轻松上手 🎯

XiaoqiangClub的博客 761

成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred

成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 目录 解决问题 解决思路 解决方法 解决问题 安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 解决思路 发生未知错误。 解决方法 很可能是因为当前电脑下载的cuda版本不适合当前电脑GPU支持的cuda版本! 推荐文章:CV:Win1..

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 7525

Spring监听器和Servlet监听器区别与使用

Servlet和Spring的监听器区别与使用

zjhblog的博客 424

(第七章)FAST开发方法

摘要: FAST是一种轻量级、业务驱动的系统分析与开发框架,适用于中小型项目,强调快速交付和组件化开发。其核心包括8个阶段:范围定义、问题分析、需求分析、逻辑设计、决策分析、物理设计、构造测试和安装发布。特点为结构化、用户参与、迭代渐进,适合需求明确且需快速交付的项目。与RUP(重量级)、敏捷(极轻量)相比,FAST更侧重业务分析和模块化开发。软考中可通过口诀“范围问题求逻辑,决策物理构发布”记忆阶段,并掌握五大开发方法(瀑布、原型、FAST、RUP、敏捷)的核心区别及适用场景。

echo的博客 917

带你了解Spring监听器

这里写自定义目录标题欢迎使用Markdown编辑器新的改变 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markd

烟花易冷 3274

YOLOv10改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv10目标检测改进方法研究。利用提高的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征,提高对小目标的关注度。Exploiting Scale-Variant Attention for Segmenting Small Medical Objects使用一种基于随机采样的池化操作来生成尺度无关的注意力图。它从三个不同尺度(3×33×33×3、2×22×22×2和1×11×11×1,即池化张量)中随机选择一个1×11×11×1注意力图

Limiiiing的博客 2189

【开发必备插件】iframe嵌套报“拒绝连接请求”的本地解决方法

关键词:iframe 拒绝连接、X-Frame-Options、Chrome 插件、前端调试、Allow X-Frame-Options前几天我在本地项目里调试一个第三方网站的嵌入页面时,遇到了一个非常经典的报错:xxx.com 拒绝了我们的连接请求。熟悉的老前端们一眼就知道——这是。但对于日常开发来说,我们经常需要在本地测试 iframe 嵌套外部页面(比如嵌第三方登录页、支付页、可视化报表系统等)。而线上站点配置了或DENY时,就会直接导致 iframe 加载失败。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1545

Spring之监听器

一.监听器的作用 监听器的作用是监听一些事件的发生从而进行一些操作,比如监听ServletContext,HttpSession的创建,销毁,从而执行一些初始化加载配置文件的操作, 当Web容器启动后,Spring的监听器会启动监听,监听是否创建ServletContext的对象,如果发生了创建ServletContext对象这个事件(当web容器启动后一定会生成一个ServletContext对...

Angela_L的博客 795

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

spring监听器原理

1. 使用Spring 事件 Spring事件体系包括三个组件:事件,事件监听器,事件广播器。 2.Spring内置事件 内置事件中由系统内部进行发布,只需注入监听器 监听器简单使用 自定义事件 public class BigEvent extends ApplicationEvent { private String name; public BigEvent(Object source, String name) { super(source).

qq_30364247的博客 1597

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

spring中监听器的使用

1.自定义监听器类实现 ApplicationListener 接口} }2.spring容器注册自定义监听器} }3.测试} }4.控制台打印1.自定义事件实现 ApplicationEvent 接口/***} }2.自定义监听器触发自定义事件} }注意事项3.注册监听器} }4.发布事件参考 spring 源码发布事件的方法自定义触发事件ac . publishEvent(new MyEnvent("我自定义的注册事件"));5.测试。

java技术博客 995

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Spring高手之路7——事件机制与监听器的全面探索

本篇文章为你详细解析了Spring的事件机制,包括了Spring事件模型的四个核心概念:事件源、事件、广播器、监听器。我们通过深入浅出的实例解析了如何自定义事件和监听器,以及如何在实际项目中应用。最后,我们还详细探讨了监听器和Bean的生命周期的关系。无论你是Spring初学者,还是有一定经验的开发者,阅读本文都将帮助你更深入地理解Spring的事件机制和监听器,掌握Spring框架的核心技术。

卓越无关环境,保持空杯心态——靡不有初,鲜克有终 1万+

Spring listener——Spring boot实现监听器的两种方式

我们知道,在spring启动的过程中,会生成很多的监听器,监听整个spring容器的生命周期。那么,我们想要生成自己的listener需要怎么做呢?今天,就给大家带来spring boot实现监听器的两种方式。 自定义事件 自定义事件XiaoAMaCreatedEvent继承ApplicationEvent类 /** * [说明] * * @author xiaoama */ public class XiaoAMaCreatedEvent extends ApplicationEvent {

zxh1991811的博客 1万+

【Spring框架】Spring监听器的简介和基本使用

本篇文章带你快速了解Spring事件监听器的使用方法和运作模式。

小七的博客 2888

Spring监听器的作用

监听器的作用是监听一些事件的发生从而进行一些操作,比如监听ServletContext,HttpSession的创建,销毁,从而执行一些初始化加载配置文件的操作, 当Web容器启动后,Spring的监听器会启动监听,监听是否创建ServletContext的对象,如果发生了创建ServletContext对象这个事件(当web容器启动后一定会生成一个ServletContext对象,所以...

Insect_boy的博客 874

这次终于把Spring的监听器讲明白了

实践加源码讲解监听器

Java鱼仔的博客 2215
上一篇: zookeeper 的实现机制,有缓存,如何存储注册服务的
下一篇: spring 的 bean 配置的几种方式
Flying_Fish_Xuan
Flying_Fish_Xuan 新星创作者: 后端开发技术领域 新星创作者: 后端开发技术领域
博客等级 码龄5年 1万+粉丝 2409原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flying_Fish_Xuan

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值