- cmd批处理常用符号详解
weixin_34129696
1、@一般在它之后紧跟一条命令或一条语句,则此命令或语句本身在执行的时候不会显示在屏幕上。请把下面的代码保存为test.cmd文件,然后运行,比较一下两条echo语句在屏幕上的输出差异:echoa@pause@echob@pause执行结果如下:C:\DocumentsandSettings\JM\桌面>echoaa请按任意键继续...b请按任意键继续...2、%、%%百分号用在不同的场合,有不同
- HTML<!DOCTYPE>声明
新生派
html前端javascript
例子TitleofthedocumentThecontentofthedocument......定义和用法所有HTML文档都必须以声明开始。声明不是HTML标签。它是向浏览器提供的有关预期文档类型的“信息”。在HTML5中,声明很简单:浏览器支持较旧的HTML文档在较旧的文档(HTML4或XHTML)中,声明更为复杂,因为声明必须引用DTD(文档类型定义)。HTML4.01:XHTML1.1:提
- C#操作Xml节点
我曾经是个程序员
常用代码片段xmlc#
见过不少人、经过不少事、也吃过不少苦,感悟世事无常、人心多变,靠着回忆将往事串珠成链,聊聊感情、谈谈发展,我慢慢写、你一点一点看......1、增加节点publicstaticboolAppendChild(stringfilePath,stringxPath,XmlNodexmlNode){try{XmlDocumentdoc=newXmlDocument();doc.Load(filePath
- JavaScript详解十三 ——节点操作
遇见~未来
JavaScriptJavaScript详解javascript开发语言ecmascript
目录节点操作1、创建节点2、创建文本3、添加节点(先有父母才能生孩子)4、替换节点5、删除节点6、克隆节点7、创建节点另外几种方式(1)、element.innerHTML(2)、element.innerText(3)、document.write()(4)、insertAdjacentHTML()节点操作1、创建节点docment.createElement('节点')参数:标签名字符串这些元
- 掌握未来游戏开发:Unreal Engine 5与C++的完美结合
金文依
掌握未来游戏开发:UnrealEngine5与C++的完美结合【下载地址】UnrealEngine5游戏开发教程-使用C脚本分享UnrealEngine5游戏开发教程-使用C++脚本欢迎来到“UnrealEngine5GameDevelopmentwithC++Scripting”资源下载页项目地址:https://gitcode.com/Open-source-documentation-tut
- PHP xml 常用函数整理
請叫我菜鳥
php开发语言
————————-DOM函数————————————–1、DOMDocument->load()作用:加载xml文件用法:DOMDocument->load(stringfilename)参数:filename,xml文件;返回:如果成功则返回TRUE,失败则返回FALSE。2、DOMDocument->loadXML()作用:加载xml代码用法:DOMDocument->loadXML(stri
- TypeScript开发OFD阅读器指南
源之缘-OFD解决方案之道
ofdtypescriptjavascript前端
1.项目概述OFD(OpenFixed-layoutDocument)是一种开放版式文档格式,类似于PDF,但具有更高的灵活性和可扩展性。开发一个OFD阅读器需要解析OFD文件的结构,并将其内容渲染到屏幕上。本文将详细介绍如何使用TypeScript开发一个简单的OFD阅读器。开发一款ofdweb阅读器有很大的挑战性,本人开发过一款完善的ofdweb阅读器,见文章《ofd轻阅读---采用Types
- 【赵渝强老师】MongoDB逻辑存储结构
数据库nosqlmongodb
MongoDB的逻辑存储结构是一种层次结构,主要包括了三个部分,即:数据库(Database)、集合(Collection,也可以叫做表)和文档(Document,也可以叫做记录)。MongoDB的逻辑存储结构是面向用户使用的,使用mongoshell或者应用程序操作MongoDB时,主要就是操作的MongoDB逻辑存储结构。视频讲解如下:https://www.bilibili.com/vide
- Vue全流程--数据代理的理解以及在Vue中的应用
不清参
Vue全流程vue.js前端javascript
数据代理定义数据代理就是通过一个数据对象代理对另一个对象中的属性进行读/写需要用到的基础知识js的Object.defineProperty函数补充:(请大致读完后再看下文)Documentletnumber=18;letdata={//Modelname:"小王",sex:"男",url:'https://space.bilibili.com/1347961416?spm_id_from=333
- vue使用阿里云视频点播
像山里的风
vue.jsjavascript阿里云
vue使用阿里云视频点播——videoId+playauth的方式一.上传视频官方文档https://help.aliyun.com/document_detail/52204.htm?spm=a2c4g.11186623.0.0.4885a393kRPguB#task-19956481.在index.html页面引入JavaScript脚本。具体代码,已有视频时回显并且可以查看视频、删除视频;没
- OSS获得阿里云服务端签名——服务端签名后直传
chengqiuming
JavaWebjava
一任务完成上图的第1步和第2步。二参考https://help.aliyun.com/document_detail/31926.html?spm=a2c4g.11186623.6.1711.4d777815zWYCD0三创建第三方服务微服务1配置依赖4.0.0org.springframework.bootspring-boot-starter-parent2.2.1.RELEASEcom.at
- python执行js缺少window变量_python使用execjs执行含有document、window等对象的js代码,使用jsdom解决...
weixin_39963440
当我们分析爬虫时,有时候会遇到一些加密参数,这个时候就需要我们逆向分析jspython执行js有一些第三方库因为我用的Python3,所以没用PyV8(安装网上的方法,也没有安装好,可能我太笨了--!如果有会的麻烦指点一下)我用的比较多的就是js2py和execjs有一次在分析js时,我已经找到了对应的加密方法,在浏览器上运行时,直接拿到了结果,开心的一匹然我把js代码复制下来,在Python里通
- 【AIcoding技术必知必会】12问--前后端联调是什么?
srzxy42
AIcoding技术必知必会ai产品经理学习
基础说明前后端联调(Frontend-BackendIntegration)是指前端工程师和后端工程师将各自开发的功能模块进行对接和测试的过程。这个过程确保前端页面能够正确地与后端API进行数据交互,实现完整的业务功能。具体步骤准备阶段前后端团队共同制定接口文档(APIDocumentation)确定接口的请求方式(GET/POST等)定义请求参数和返回数据格式(通常是JSON)约定接口的命名规范
- 腾讯云COS,外网下行流量 白名单,
fK0pS
经验分享
腾讯云COS,外网下行流量白名单,https://cloud.tencent.com/document/product/436/13319把csdn放在黑名单里即可;https://cloud.tencent.com/document/product/436/13319*.csdn.netCSDN网站就刷不了外网的流量了。Nice
- C#+ckeidtor5实现图片上传
假装我不帅
dotnetjsc#ckeditor5
index.htmlCkEditor5html,body{width:100%;height:100%;}.editor-container{width:100%;height:100%;}#editor{width:100%;height:100%;}HelloWorld!ClassicEditor.create(document.querySelector('#editor'),{licens
- 使用Python解析pdf、docx等格式文件。
Shy960418
Python使用技巧pythonpdflinux
针对不同类型的文件,需要采取特定的访问与解析策略来有效获取其中蕴含的知识。下面我们将介绍对于不同数据源数据的获取方式。1解析Docx文档1.1获取Docx文档中文本fromdocximportDocument#pipinstallpython-docx#python-docx==0.8.11filename='xxx.docx'doc=Document(filename)forparaindoc.
- windows.location.href 无法使用post请求的解决办法
BlueSea丶
模拟表单提交的办法核心代码:document.write("");document.write("");document.write("");document.form1.submit();代码:varid=$("#id").val();$.post("login_user/",{'id':id,'password':password},function(ret){if(ret.result=='
- 正则表达式--元字符-基础字符(2)
叶不休
正则表达式javascript前端chromehtml5csshtml
只代表一位1.\w字母数字下划线2.\W非字母数字下划线3..任意内容(换行不算)4.转义字符\强行转义成没意义的Document//.\w包含一位字母数字下划线varreg6=/\w/console.log(reg6.test("&*"))console.log(reg6.test("12abc"))console.log(reg6.test("a"))console.log(reg6.test
- mac homebrew 安装
小画家~
前端macos
Homebrewhasenabledanonymousaggregateformulaeandcaskanalytics.Readtheanalyticsdocumentation(andhowtoopt-out)here:https://docs.brew.sh/AnalyticsNoanalyticsdatahasbeensentyet.Homebrewisrunentirelybyunpai
- 07-等保三级-Ubuntu 16合规基线检查
杜桥宾Tony
07-等保三级-Ubuntu16合规基线检查【下载地址】07-等保三级-Ubuntu16合规基线检查分享本仓库提供了一个资源文件,用于对Ubuntu16系统进行等保三级合规基线检查。该资源文件包含了详细的检查步骤和配置要求,帮助用户确保其系统符合等保三级的安全标准项目地址:https://gitcode.com/Open-source-documentation-tutorial/f0839简介本
- javascript document例子
飞行codes
python的荒野javascript前端
document对象是JavaScript中非常核心的对象之一,它是DOM(DocumentObjectModel)的一部分,提供了丰富的属性和方法用于操作网页上的元素和内容。和文件相关操作,比如上传下载等。下载文件例如image.png:functiondownloadImage(){varlink=document.createElement('a');link.href="{{url_for
- 鸿蒙hdc环境搭建与使用
Frank cyl
harmonyosadb华为鸿蒙鸿蒙系统
写在前面:一句话概括就是鸿蒙版adb一、简介hdc(HarmonyOSDeviceConnector)是HarmonyOS为开发人员提供的用于调试的命令行工具,通过该工具可以在windows/linux/mac系统上与真实设备或者模拟器进行交互。官方文档https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/devec
- Jquery 、Js —— 获取当前年月日、星期几 、地点、天气!
爱吃果蔬的猫
Jqueryjquery前端javascript
最近的工作中的小需求,自己整理了下有关——日期与天气的代码:有其他需求的小伙伴可以去官网天气插件-心知天气html代码Date:Time:Day:js代码$(document).ready(function(){functionupdateDateTime(){constnow=newDate();constyear=now.getFullYear();constmonth=(now.getMon
- 深入解析特斯拉Model 3:传感器技术与整体架构
伍乾廷Questa
深入解析特斯拉Model3:传感器技术与整体架构【下载地址】特斯拉Model3整体架构解析资源下载特斯拉Model3整体架构解析资源下载项目地址:https://gitcode.com/Open-source-documentation-tutorial/2d66c项目介绍特斯拉Model3作为电动汽车领域的佼佼者,其先进的传感器技术和整体架构设计一直是业界关注的焦点。本项目提供了一个名为“特斯拉
- How to use the Ubuntu
testtraveler
ubuntulinux
HowtousetheUbuntuIntroductionAsfarasIhavenoted,IwillforcemyselftowriteallmyblogsinEnglish.So,ifyouareluckyorunlucky,youhavereadthisblog,andIhopeitcanbehelpfultoyou.ReadinganEnglishdocumentcanbeatrick
- pycharm 升级后报错
TTXS_RS
Crack-Pytorchpytorch人工智能pythonpycharm
完整warning:pywintypes.py:2:DeprecationWarning:theimpmoduleisdeprecatedinfavourofimportlib;seethemodule'sdocumentationforalternativeusesimportimp,sys,os试了很多种方法都不管用,直到在GitHub上看到这么句话:(inotherwords,pywinty
- firefox PAC代理
黑客呀
网络安全网络工程师计算机firefox前端安全web安全
在linux用firefox,又不像windows下的chrome那样,可以直接设置个自动代理,但是发现firefox有个自动代理的功能哦。/home/allen/Documents/google.pac的内容如下:"usestrict";/**Generatedfromhttps://github.com/NewFuture/pac*seeallpacfileshttps://pac.newfu
- Windchill开发-常用对象关系表
这城有海
Windchill二开java
常用对象关系表一、说明二、对象关系表一、说明表中记录的是Windchill中常用的对象,通过此表可以很清晰的了解对象与对象之间的关联关系,从而方便进行数据库的查询。对于快速定位对象获取的API也有一定的帮助二、对象关系表FromObjectFromRelationLinkObjectToRelationToObjectwt.doc.WTDocumentusedBywt.doc.WTDocument
- 用Proxy实现watch监听对象、用Proxy代理函数可添加额外逻辑
vue3javascript
使用Proxy实现watch监听对象手写一个简单的watch函数用来监听某个数据的变化,比如Object我们来写一个简单的形式的watch形式:watch(target,(newVal,oldVal)=>{})target表示监听的对象,newVal,oldVal自然就是新值和旧值如下完整代码:Document变化functionwatch(target,callback){letoldObj=J
- MongoDB简介
张飞光
mongodb数据库
MongoDB是一个文档型数据库,数据以类似JSON的文档形式存储。MongoDB的设计理念是为了应对大数据量、高性能和灵活性需求。MongoDB使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成的。数据库(Database):存储数据的容器,类似于关系型数据库中的数据库。集合(Collection):数据库中的一个集合,类似于关系型数据库中的表。文档(D
- 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发布消息