- Redis原理:watch命令
csjane1079
redisredisjava
在前面的文章中有提到,在multi前可以通过watch来观察哪些key,被观察的这些key,会被redis服务器监控,涉及该key被修改时,则在exec命令执行过程中会被识别出来,exec就不会再执行命令。源码分析//监控对应的keyvoidwatchCommand(client*c){intj;if(c->flags&CLIENT_MULTI){addReplyError(c,"WATCHins
- 记录使用Python从RocketMQ中实现数据消费及推送
搬运工-
rocketmq
背景:工作需要使用Python3从rocketmq的队列里读取数据,相关文档也比较少,找到rocketmqpython库在GitHub地址:https://github.com/apache/rocketmq-client-python官网表示基于rocketmq-client-cpp,支持Linux和macOS系统系统环境:1、centos72、python33、RocketMQ4.9.1安装R
- gitee第三方登录获取openid | python+Django |已跑通
shenmu84
giteepythonjquery
注:此项目根据美多改编,qq第三方需要备案gitee不用一、获取appid和appsecret点击右侧账号设置左侧菜单栏数据管理里有第三方应用点击创建应用,根据你的具体情况设置二、以下是事例代码,根据需要修改即可setting.py#QQ登录参数GITEE_CLIENT_ID='这里填你的appid'GITEE_CLIENT_SECRET='这里填你的appsecret'GITEE_REDIREC
- WX小程序
Angelyb
Java后端小程序
下载packagecom.sky.utils;importcom.alibaba.fastjson.JSONObject;importorg.apache.http.NameValuePair;importorg.apache.http.client.config.RequestConfig;importorg.apache.http.client.entity.UrlEncodedFormEnt
- vue3封装socket.io全局使用
lijingxian1991
javascriptwebsocket
安装$npmisocket.io-client--save创建socket-io.jsimport{ref}from'vue'constsocket=ref(null)letglobal_callback=nullimport{io}from"socket.io-client";exportconstinitWebSocket=(url)=>{socket.value=io(url,{transp
- Cisco Secure Client 5.1.7.122 发布,新增功能概览
cisco
CiscoSecureClient5.1.7.122发布,新增功能概览CiscoSecureClient5.1.8.122(macOS,Linux,Windows&iOS,Andrord)-远程访问和安全客户端思科安全客户端(包括AnyConnect)请访问原文链接:https://sysin.org/blog/cisco-secure-client-5/查看最新版。原创作品,转载请保留出处。作者
- IDEA/DataGrip 开发者的必备插件 - PawSQL for Jetbrains, 开发人员的SQL优化工具
PawSQL,在线SQL优化工具
PawSQLPawSQL插件SQL优化sql性能优化数据库pawsql
PawSQLforJetbrains简介PawSQLforJetbrains(PawSQLClient)和PawSQLforVSCode一样,它将PawSQL引擎的智能SQL优化能力无缝集成到您的开发环境中,支持智能索引推荐、查询重写和自动化性能验证。通过与PawSQLCloud或企业私域部署的PawSQL优化平台配合使用,让开发者在在自己的IDE中完成SQL性能优化。在IDEA/DataGrip
- 探索现代化的Slack API客户端:Slack Morphism for Rust
邱行方Mountain
探索现代化的SlackAPI客户端:SlackMorphismforRustslack-morphism-rustAmodernasyncclientlibraryforRust,supportsSlackWeb/EventsAPI/SocketModeandBlockKit.项目地址:https://gitcode.com/gh_mirrors/sl/slack-morphism-rust项目介
- 微信支付功能的实现
cwtlw
微信学习java
1.阅读官方文档开发指引_Native支付|微信支付商户文档中心1.开发使用安装依赖com.github.wxpaywxpay-sdk0.0.3org.apache.httpcomponentshttpclient4.5.32.配置配置文件#微信的appid,商家id和密钥weixin.appid=wx8087d8...weixin.mch_id=1532...weixin.api_key=Cc1
- Apache HttpClient的用法
98巨人
JavaWeb篇
ApacheHttpClient简介 HttpClient是ApacheJakartaCommon下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。ApacheHttpClient使用步骤01添加Jar包未使用Meaven的在项目中添加以下jar包httpclient4.5.5、luent-hc4.5.5、httpmime4
- Apache HttpClient使用详解
认真的学生
java网络编程javahttpClienthttp
转载地址:http://eksliang.iteye.com/blog/2191017Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpC
- Apache HttpClient总览
诗人不写诗
三方库使用apache
一、重大版本ApacheHttpClient4.x系列•HttpClient4.0(发布于2008年左右):这是一个重要的里程碑,标志着HttpClient从JakartaCommons项目转移到ApacheHttpComponents项目。4.0版进行了大量的重构,引入了新的连接管理模型(基于HttpCore),支持了HTTP/1.1的持久连接、连接池以及更灵活的配置选项。•HttpClient
- docker中间件部署
java资料站
运维docker中间件容器
1.docker安装#1.卸载旧版本yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine#2.需要的安装包yuminstall-yyum-utils#3.设置镜像的仓库#3.1.默认是国
- WebService接口的调用
小猜忌
javaspringspringcloudwebideidea
WebService接口的调用首先看看地址是否可以调通如下:1.需要生成基础代码1.创建WebServiceProject,命名为TheClient。2.在dos命令下输入wsimport-s“src目录”-p“生成类所在包名”-keep“wsdl发布地址”示例:wsimport-sG:\workspace\webService\webService_Project\src-pcom.pcm.ws
- python 生日配对网站 每个日期全都看一遍
njsgcs
python开发语言
importhttp.clientdef寻(fint):conn=http.client.HTTPSConnection("www.aibazi.cn")payload=''headers={'User-Agent':'Apifox/1.0.0(https://apifox.com)','Accept':'*/*','Host':'www.aibazi.cn','Connection':'keep
- minio数据迁移
Daydreamer .
服务器miniominio
使用MinIOClient(mc)工具实现跨服务器的存储桶数据复制一、安装MinIOClient在源服务器或本地机器上安装mc:wgethttps://dl.min.io/client/mc/release/linux-amd64/mcchmod+xmcsudomvmc/usr/local/bin/二、配置MinIO服务器别名添加源服务器配置(假设源服务器地址为http://source-mini
- C++使用QtHttpServer开发服务端Server的Http POST接口和客户端Client示例
BigBookX
Qtc++qthttp
ClientHTTPPOST假设http://127.0.0.1:8888/post/是一个能够接受POST请求的路径,我们想要向它提交一段json数据,用Qt可以这样实现:SupposewewanttomakeanHTTPPOSTwithjsonbodytohttp://127.0.0.1:8888/post/.QCoreApplicationapp(argc,argv);QNetworkAcc
- restTemplate配置及使用
盛夏光年hs
#SpringBootjavahttprestful
1场景java开发中,使用http连接,访问第三方网络接口,通常使用的连接工具为HttpClient和OKHttp。这两种连接工具,使用起来比较复杂,新手容易出问题。如果使用spring框架,可以使用restTemplate来进行http连接请求。restTemplate默认的连接方式是java中的HttpConnection,可以使用ClientHttpRequestFactory指定不同的HT
- 探索UI自动化测试新境界:RCP Testing Tool深度解析
吕真想Harland
探索UI自动化测试新境界:RCPTestingTool深度解析org.eclipse.rcptt项目地址:https://gitcode.com/gh_mirrors/or/org.eclipse.rcptt在软件开发的浩瀚星空中,自动化测试如同导航灯,为高质量的产品指明方向。今天,我们聚焦一款专为EclipseRichClientPlatform(RCP)量身打造的神器——RCPTestingT
- NAT 模式
Girrzy
服务器php数据库
使用LVS的NAT模式实现3台RS的轮询访问。IP地址和主机自己规划。1.节点规划主机角色系统网络IPclientclientredhat9.5仅主机192.168.180.100/24lvslvsredhat9.5仅主机NAT192.168.180.200/24VIP192.168.72.8/24DIPnginxrs1redhat9.5NAT192.168.226.7/24nginxrs2red
- Kafka自定义分区机制
weixin_44231698
kafkakafka自定义分区策略
文章目录1.如何自定义分区机制2.示例1.如何自定义分区机制若需要使用自定义分区机制,需要完成两件事:1)在producer程序中创建一个类,实现org.apache.kafka.clients.producer.Partitioner接口主要分区逻辑在Partitioner.partition中实现。2)在用于构造KafkaProducer的Properties对象中设置partitioner.
- Kafka拦截器
weixin_44231698
kafkakafka
文章目录1.定义2.生产者拦截器2.1示例3.消费者拦截器3.1示例1.定义拦截器主要用于实现clients端的定制化需求,包括消息在生产者发送到Kafka或者在消费者接收消息之前进行一些定制化的操作。用于在消息发送和接收的关键步骤中进行拦截和处理。可以修改消息,日志记录,统计等。由生产者拦截器和消费者拦截器组成。生产者的拦截器是在发送前和确认后调用,而消费者的则是在接收后和提交前。2.生产者拦截
- MCP Client 开发教程
前端人工智能llm
快速入门面向客户端开发者开始构建你自己的客户端,该客户端可以与所有MCP服务端集成。在本教程中,你将学习如何构建一个与MCP服务端连接的LLM驱动的聊天机器人客户端。建议你先完成服务端快速入门,该指南将引导你完成构建第一个服务端的基本步骤。Python教程其他语言看这里你可以在这里找到本教程的完整代码。系统要求在开始之前,请确保你的系统满足以下要求:Mac或Windows电脑已安装最新版本的Pyt
- Spring AI Alibaba ChatClient使用
Charge8
#SpringAISpringAIChatClient使用
一、ChatClient简介ChatClient:https://java2ai.com/docs/1.0.0-M5.1/tutorials/chat-client/1、ChatClient简介ChatClient提供了与AI模型通信的FluentAPI,它支持同步和反应式(Reactive)编程模型。与ChatModel、Message、ChatMemory等原子API相比,使用ChatClie
- WebSocket:现代实时通信协议的深度解析与实践
这个懒人
websocket网络协议网络
一、背景与演进历程1.1传统实时通信的困境//典型的HTTP轮询伪代码while(true){autoresponse=http_client.get("/messages");if(response.has_data())process(response);std::this_thread::sleep_for(1s);//固定间隔轮询}高延迟:轮询间隔导致消息传递延迟带宽浪费:重复传输Head
- 【后端】【Django】Django DRF API 单元测试完整方案(基于 `TestCase`)
患得患失949
django知识后端系统功能django单元测试sqlite
DjangoDRFAPI单元测试完整方案(基于TestCase)一、方案概述使用django.test.TestCase和rest_framework.test.APIClient进行API单元测试,确保API正确性、权限控制、数据返回格式、业务逻辑等。二、基本步骤使用setUp()初始化测试环境创建API客户端APIClient()预先插入数据库测试数据(如普通用户、管理员用户等)生成Token
- PHPnow 数据库编码 Latin1转换UTF-8
咯拉咯啦
MYSQL
以PHPnow1.5.6-1为例:打开MySQL的配置文件,位置在PHPnow/MySQL-5.0.90/my.ini,做以下修改,没有的配置请自己添加,路径请自己修改,需要修改三处就可以。一[client]#password=your_passwordport=3306socket=/tmp/mysql.sock后边添加:default-character-set=utf8二[mysqld]de
- python调用DeepSeek的API
garfield_sun06
大模型python语言模型
1获取API获得deepseek开放平台的APIhttps://platform.deepseek.com/api_keys点击创建APIkey2调用方法方法一:采用openai的调用方法pipinstallopenai需要openai的包调用的代码框架fromopenaiimportOpenAIimportosclient=OpenAI(api_key='自己的APIkey',base_url=
- Kubernetes Init 容器:实现 Nginx 和 PHP 对 MySQL 的依赖检查
曹天骄
kubernetesnginxphp
在设计KubernetesPod时,如果需要在启动Nginx和PHP之前等待MySQL启动完成,可以通过初始化容器(initC)来实现。初始化容器可以用于检查MySQL是否可用,只有在MySQL可用后,才会继续启动主容器(Nginx和PHP)。设计思路初始化容器(initC):使用一个简单的脚本或工具(如mysql-client)来检查MySQL服务是否可用。如果MySQL可用,初始化容器成功退出
- python本地连接minio
伶星37
python网络服务器
在你浏览器能成功访问到你的minio网页,并且成功登录之后。接下来如果你想用python连接数据库,并且想用python连接minio,就可以用这个blog。连接代码client=Minio("localhost:9000",#9000是默认端口号access_key="admin",#你的账户secret_key="password",#你的密码secure=False,#这点我会详细说明)为什
- jQuery 键盘事件keydown ,keypress ,keyup介绍
107x
jsjquerykeydownkeypresskeyup
本文章总结了下些关于jQuery 键盘事件keydown ,keypress ,keyup介绍,有需要了解的朋友可参考。
一、首先需要知道的是: 1、keydown() keydown事件会在键盘按下时触发. 2、keyup() 代码如下 复制代码
$('input').keyup(funciton(){
- AngularJS中的Promise
bijian1013
JavaScriptAngularJSPromise
一.Promise
Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。
为了展示它的优点,下面来看一个例子,其中需要获取用户当前的配置文件:
var cu
- c++ 用数组实现栈类
CrazyMizzz
数据结构C++
#include<iostream>
#include<cassert>
using namespace std;
template<class T, int SIZE = 50>
class Stack{
private:
T list[SIZE];//数组存放栈的元素
int top;//栈顶位置
public:
Stack(
- java和c语言的雷同
麦田的设计者
java递归scaner
软件启动时的初始化代码,加载用户信息2015年5月27号
从头学java二
1、语言的三种基本结构:顺序、选择、循环。废话不多说,需要指出一下几点:
a、return语句的功能除了作为函数返回值以外,还起到结束本函数的功能,return后的语句
不会再继续执行。
b、for循环相比于whi
- LINUX环境并发服务器的三种实现模型
被触发
linux
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。
1 循环服务器与并发服务器模型
在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。
目前最常用的服务器模型有:
·循环服务器:服务器在同一时刻只能响应一个客户端的请求
·并发服务器:服
- Oracle数据库查询指令
肆无忌惮_
oracle数据库
20140920
单表查询
-- 查询************************************************************************************************************
-- 使用scott用户登录
-- 查看emp表
desc emp
- ext右下角浮动窗口
知了ing
JavaScriptext
第一种
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/
- 浅谈REDIS数据库的键值设计
矮蛋蛋
redis
http://www.cnblogs.com/aidandan/
原文地址:http://www.hoterran.info/redis_kv_design
丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。
- maven编译可执行jar包
alleni123
maven
http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven
<build>
<plugins>
<plugin>
<artifactId>maven-asse
- 人力资源在现代企业中的作用
百合不是茶
HR 企业管理
//人力资源在在企业中的作用人力资源为什么会存在,人力资源究竟是干什么的 人力资源管理是对管理模式一次大的创新,人力资源兴起的原因有以下点: 工业时代的国际化竞争,现代市场的风险管控等等。所以人力资源 在现代经济竞争中的优势明显的存在,人力资源在集团类公司中存在着 明显的优势(鸿海集团),有一次笔者亲自去体验过红海集团的招聘,只 知道人力资源是管理企业招聘的 当时我被招聘上了,当时给我们培训 的人
- Linux自启动设置详解
bijian1013
linux
linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。
阅读之前建议先看一下附图。
本文中假设inittab中设置的init tree为:
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc
- Spring Aop Schema实现
bijian1013
javaspringAOP
本例使用的是Spring2.5
1.Aop配置文件spring-aop.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmln
- 【Gson七】Gson预定义类型适配器
bit1129
gson
Gson提供了丰富的预定义类型适配器,在对象和JSON串之间进行序列化和反序列化时,指定对象和字符串之间的转换方式,
DateTypeAdapter
public final class DateTypeAdapter extends TypeAdapter<Date> {
public static final TypeAdapterFacto
- 【Spark八十八】Spark Streaming累加器操作(updateStateByKey)
bit1129
update
在实时计算的实际应用中,有时除了需要关心一个时间间隔内的数据,有时还可能会对整个实时计算的所有时间间隔内产生的相关数据进行统计。
比如: 对Nginx的access.log实时监控请求404时,有时除了需要统计某个时间间隔内出现的次数,有时还需要统计一整天出现了多少次404,也就是说404监控横跨多个时间间隔。
Spark Streaming的解决方案是累加器,工作原理是,定义
- linux系统下通过shell脚本快速找到哪个进程在写文件
ronin47
一个文件正在被进程写 我想查看这个进程 文件一直在增大 找不到谁在写 使用lsof也没找到
这个问题挺有普遍性的,解决方法应该很多,这里我给大家提个比较直观的方法。
linux下每个文件都会在某个块设备上存放,当然也都有相应的inode, 那么透过vfs.write我们就可以知道谁在不停的写入特定的设备上的inode。
幸运的是systemtap的安装包里带了inodewatch.stp,位
- java-两种方法求第一个最长的可重复子串
bylijinnan
java算法
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MaxPrefix {
public static void main(String[] args) {
String str="abbdabcdabcx";
- Netty源码学习-ServerBootstrap启动及事件处理过程
bylijinnan
javanetty
Netty是采用了Reactor模式的多线程版本,建议先看下面这篇文章了解一下Reactor模式:
http://bylijinnan.iteye.com/blog/1992325
Netty的启动及事件处理的流程,基本上是按照上面这篇文章来走的
文章里面提到的操作,每一步都能在Netty里面找到对应的代码
其中Reactor里面的Acceptor就对应Netty的ServerBo
- servelt filter listener 的生命周期
cngolon
filterlistenerservelt生命周期
1. servlet 当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后调用它的service方法处理请求。当第二次请求这个servlet资源时,servlet容器就不在创建实例,而是直接调用它的service方法处理请求,也就是说
- jmpopups获取input元素值
ctrain
JavaScript
jmpopups 获取弹出层form表单
首先,我有一个div,里面包含了一个表单,默认是隐藏的,使用jmpopups时,会弹出这个隐藏的div,其实jmpopups是将我们的代码生成一份拷贝。
当我直接获取这个form表单中的文本框时,使用方法:$('#form input[name=test1]').val();这样是获取不到的。
我们必须到jmpopups生成的代码中去查找这个值,$(
- vi查找替换命令详解
daizj
linux正则表达式替换查找vim
一、查找
查找命令
/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
字符串匹配
pattern是需要匹配的字符串,例如:
1: /abc<En
- 对网站中的js,css文件进行打包
dcj3sjt126com
PHP打包
一,为什么要用smarty进行打包
apache中也有给js,css这样的静态文件进行打包压缩的模块,但是本文所说的不是以这种方式进行的打包,而是和smarty结合的方式来把网站中的js,css文件进行打包。
为什么要进行打包呢,主要目的是为了合理的管理自己的代码 。现在有好多网站,你查看一下网站的源码的话,你会发现网站的头部有大量的JS文件和CSS文件,网站的尾部也有可能有大量的J
- php Yii: 出现undefined offset 或者 undefined index解决方案
dcj3sjt126com
undefined
在开发Yii 时,在程序中定义了如下方式:
if($this->menuoption[2] === 'test'),那么在运行程序时会报:undefined offset:2,这样的错误主要是由于php.ini 里的错误等级太高了,在windows下错误等级
- linux 文件格式(1) sed工具
eksliang
linuxlinux sed工具sed工具linux sed详解
转载请出自出处:
http://eksliang.iteye.com/blog/2106082
简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾
- Android应用程序获取系统权限
gqdy365
android
引用
如何使Android应用程序获取系统权限
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点
- HoverTree开发日志之验证码
hvt
.netC#asp.nethovertreewebform
HoverTree是一个ASP.NET的开源CMS,目前包含文章系统,图库和留言板功能。代码完全开放,文章内容页生成了静态的HTM页面,留言板提供留言审核功能,文章可以发布HTML源代码,图片上传同时生成高品质缩略图。推出之后得到许多网友的支持,再此表示感谢!留言板不断收到许多有益留言,但同时也有不少广告,因此决定在提交留言页面增加验证码功能。ASP.NET验证码在网上找,如果不是很多,就是特别多
- JSON API:用 JSON 构建 API 的标准指南中文版
justjavac
json
译文地址:https://github.com/justjavac/json-api-zh_CN
如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 anti-bikeshedding 武器。
通过遵循共同的约定,可以提高开发效率,利用更普遍的工具,可以是你更加专注于开发重点:你的程序。
基于 JSON API 的客户端还能够充分利用缓存,
- 数据结构随记_2
lx.asymmetric
数据结构笔记
第三章 栈与队列
一.简答题
1. 在一个循环队列中,队首指针指向队首元素的 前一个 位置。
2.在具有n个单元的循环队列中,队满时共有 n-1 个元素。
3. 向栈中压入元素的操作是先 移动栈顶指针&n
- Linux下的监控工具dstat
网络接口
linux
1) 工具说明dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是,
- C 语言初级入门--二维数组和指针
1140566087
二维数组c/c++指针
/*
二维数组的定义和二维数组元素的引用
二维数组的定义:
当数组中的每个元素带有两个下标时,称这样的数组为二维数组;
(逻辑上把数组看成一个具有行和列的表格或一个矩阵);
语法:
类型名 数组名[常量表达式1][常量表达式2]
二维数组的引用:
引用二维数组元素时必须带有两个下标,引用形式如下:
例如:
int a[3][4]; 引用:
- 10点睛Spring4.1-Application Event
wiselyman
application
10.1 Application Event
Spring使用Application Event给bean之间的消息通讯提供了手段
应按照如下部分实现bean之间的消息通讯
继承ApplicationEvent类实现自己的事件
实现继承ApplicationListener接口实现监听事件
使用ApplicationContext发布消息