- 第 004 期 提高页面渲染速度的 3 个 CSS 技巧
前端GoGoGo7
提到提高页面渲染速度,我们第一想到的是优化JavaScript。其实通过优化CSS也能提高页面渲染速度。优化方案1.延时渲染屏幕外的内容-content-visibility:auto很长的页面会有大量的内容在屏幕外。如果只渲染屏幕内的内容,屏幕外的内容在出现时才渲染,能大大的节约渲染时间。CSSContainmentModuleLevel2模块新增了content-visibility属性。这个
- CSS3中display显示属性
阿立聊代码
网页设计css3前端html
显示属性把块级元素改为行内元素:p{display:inline}把行内元素改为块级元素,会填满父元素:a{display:block}设为none,全都消失,位置也不占,visibility为hidden消失了,但是还占位置。
- Android SystemUI 信号栏后添加信号图标,查漏补缺
起飞程序员
2024年程序员学习android
android:layout_width=“wrap_content”android:layout_marginStart=“1dp”android:visibility=“gone”android:tag=“mobile_slot_indicator_4”/>privateImageViewcustom_signal_4g;privateImageViewcustom_signal_volte;
- How To Write Shared Libraries(28)
i_need_job
2.2.4DefineVisibilityforC++Classes(2)Becausetheseproblemsaresohardtodebugitisessentialtogetthecompilerinvolvedinmakingsuretheuserfollowsthenecessaryrules.TheC++typesystemisrichenoughtohelpiftheimpleme
- css中,有哪些方式可以隐藏页面元素?区别?
呼叫6945
css前端面试
通过css实现隐藏元素方法有如下:六种方法display:nonevisibility:hiddenopacity:0设置height、width模型属性为0position:absoluteclip-pathdisplay:none设置元素的display为none是最常用的隐藏元素的方法.hide{display:none;}将元素设置为display:none后,元素在页面上将彻底消失元素本
- openGauss SQL引擎插件开发指导
openGaussMan
sql数据库openGauss
开发流程①在openGauss社区Plugin仓进行兼容性相关开发(openGauss/Plugin)②通过fastcheck自测以及CI门禁③提供checkin测试报告和开发文档并通过SIG组评审开发要点开放接口函数DLL_PUBLICPG_FUNCTION_INFO_V1_PUBLIC统一管理为了避免插件与内核同名函数所产生的符号冲突,我们在makefile中使用-fvisibility=hi
- css基础4
心理师
css基础4CSS高级技巧元素的显示与隐藏在CSS中有三个显示和隐藏的单词比较常见,我们要区分开,他们分别是displayvisibility和overflow。他们的主要目的是让一个元素在页面中消失,但是不在文档源码中删除。最常见的是网站广告,当我们点击类似关闭不见了,但是我们重新刷新页面,它们又会出现和你玩躲猫猫!!display显示display设置或检索对象是否及如何显示。display:
- 【appium】app特殊手势操作、滑动 |殊场景元素定位、toast元素、不定时弹窗 Popups
墨撕酒家
UI自动化测试app测试appiumappium测试工具
目录一、手势操作——滑动1、实战示例:向上滑动1.2应用:滑动停止判断问题:怎么判断加载完成,不能一直没停止的滑动呀,怎么停止滑动呢二、特殊场景元素定位1、toast元素定位获取方式:toast定位实例:(显示等待等待元素存在:presenceOfElementLocated)⚠️在我们等待元素可见的时候,不要用visibility_of_element_located,因为它对Toast的可见处
- SAP CRM 里 Attachment 搜索的实现逻辑介绍
我尝试在BOLBrowser里使用query来执行搜索,并且希望仅返回属于我在INSTID中指定的给定产品的附件实例。令我惊讶的是,查询结果不仅包括给定产品的附件,还返回大量属于我创建的其他产品的附件。通过调试,我发现第61行的参数CATID、TYPEID和INSTID没有传入主搜索功能模块,这意味着搜索时根本不考虑它们。相反,根据每个附件实例的属性值“CRM_SEARCH_VISIBILITY”
- 【0259】inval.h/inval.c的理解
内核之道
#▲初阶篇invalinvalmessagebackenddeleteinsert
1.inval.h/inval.cinval.h、inval.c是缓存无效消息(invalidationmessage)调度程序定义。2.inval.h/inval.c特性inval.h/inval.c的实现是一个非常微妙的东西,所以需要注意:当一个元组被更新或删除时,我们的标准可见性规则(standardvisibilityrules)认为只要我们在同一个命令中,它“仍然有效”,即直到下一个Co
- SSIM 原理及公式
十橙
OpenCV计算机视觉opencvssim结构相似性
date:2022-01-1812:53什么是SSIM?StructuralSimilarity结构相似性,源自论文《ImageQualityAssessment:FromErrorVisibilitytoStructuralSimilarity》(图像质量评估:从错误可见性到结构相似性)。在SSIM被提出之前被广泛应用的是MES,因为它计算简单,物理意义明确。MSE公式:MSE=1mn∑i=0m
- css面试题整理 简书
神仙奶奶-
1.display:none与visibility:hidden的区别?display:none不显示对应的元素,在文档布局中不再分配空间(回流+重绘)visibility:hidden隐藏对应元素,在文档布局中仍保留原来的空间(重绘)2.position跟display、overflow、float这些特性相互叠加后会怎么样?display属性规定元素应该生成的框的类型;position属性规定
- re:从0开始的CSS之旅 14. 显示模式的切换
扶摇|
从0开始的CSS之旅css前端javascript
1.两个属性display属性可以用于转换元素的显示模式可选值:block转换为块元素inline转换为行内元素inline-block转换为行内块元素none不显示元素,并且不占用元素的位置visibility属性用于设置元素是否显示可选值:visible显示元素(默认值)hidden隐藏元素,但是占用元素的位置示例如下:displaymodelchangingdiv{width:200px;h
- CSS 元素的显示与隐藏
王玉伟的伟
在CSS中有三个显示和隐藏的单词比较常见,我们要区分开,他们分别是displayvisibility和overflow。他们的主要目的是让一个元素在页面中消失,但是不在文档源码中删除。最常见的是网站广告,当我们点击类似关闭不见了,但是我们重新刷新页面,它们又会出现和你玩躲猫猫!!display显示display设置或检索对象是否及如何显示。display:none隐藏对象与它相反的是display
- 解决css3卡顿和性能优化
zz77zz
今天遇到一个比较棘手的问题css3的动画卡顿比较厉害于是找各种方法并一一去试学会简单的处理方法和部分渲染原理是否启用硬件加速GPU(GraphicsProcessingUnit)?“用到了CSS3动画”和“开启了硬件加速”是两件事情,虽然前者有可能导致后者。开启硬件加速在webkit中有神奇的万金油:opacity:1;或者-webkit-backface-visibility:hidden;。尽
- H5/CSS 笔试面试考题(1-10)
宇宙中的一颗星
h5/css笔试css面试前端
简述下列为定位属性的是()A:floatB:text-indentC:positionD:visibility面试通过率:50.0%推荐指数:★★★★试题难度:中级试题类型:选择题答案:c简述以下哪个CSS属性可以继承()A:font-sizeB:marginC:widthD:padding面试通过率:76.0%推荐指数:★★★★★试题难度:初级试题类型:选择题答案:a简述是否可以将HTML5用于
- GitLab 如何修改项目从私有到公有
HoneyMoose
在UI界面中,选择Settings>General。在弹出的界面中,选择Visibility,projectfeatures,permissions后面的Expand按钮。然后在弹出的界面中,将ProjectVisibility下面从Private选择为Public。你的项目就可以被Public访问到了。最后,不要忘记将你的修改保存以便于生效。https://blog.ossez.com/arch
- 蓝桥杯(Web大学组)2022国赛真题:水果消消乐
头发长出来了^
前端javascriptcss蓝桥杯
思路:记录点击次数,点击次数为1时,记录点击下标(用于隐藏or消除)、点击种类,点击次数为2时,判断该下标所对应种类与第一次是否相同相同:两个都visibility:hidden(占位)不同:两个都display:none遇到的bug:一开始移除相同盒子之后会出现这个情况,以为是下标搞错了从而导致删成最后两个,后来转念一想,应该是因为每次删完后面所有盒子都会向前移动,所以不需要把外面盒子元素移除,
- 2021-07-19
Daylightqvq
View和ViewGroup的关系ViewGroup是容器,可以放多个子控件添加图片:1.将静态图片资源拖动到drawable资源下2.在drawable里new一个vectorasset矢量图集可以用系统自己有的图片资源visibility可视性:gone看不见控件也不占用控件invisible看不见控件还在视图中visible:可见scaleType拉伸方式CenterCrop:等比例拉伸使图
- CityMaker 8二次开发之“这是什么鬼?”
[email protected]
citymakerGIS
什么时候才能去掉头重脚轻的毛病?1、Doc:voidIProjectTree.SetVisibility(GuidID,byteVisibleMask)设置可见性。Note:byteVisibleMask这是什么?设置可见性?该如何设置?可能:gviViewportMask是控制在不同视口的可见性的标识,如果需要设置多个,可以这样:gviView0|gviView1。因此代码这样写:uintcod
- 元素的显示与隐藏
珍✰
前端web前端htmlcss
目录1.元素的显示与隐藏1.1display属性1.2visibility可见性1.3overflow溢出1.元素的显示与隐藏1.1display属性1.2visibility可见性1.3overflow溢出
- animate.css官网网页模块渐入效果
喵呜Yuri
image.png前提是引用animate.csshtml代码:例如,在想要渐入的元素块上添加‘animated’,在属性type中添加你想要的渐入效果‘slideInLeft’css代码.animated{visibility:hidden;}.animated.in{visibility:visible;}js代码varanimateArr=[];$('.animated').each(fun
- Android Weekly Notes #461
圣骑士wind
AndroidWeeklyIssue#461CoordinatingmultipleviewvisibilitywithFlowandthecombineoperator复杂的UI状态,通过在ViewModel里combineflow来完成.ImprovingAndroidDataBindingwithBindableslibrary用这个库:https://github.com/skydoves
- 【WPF.NET开发】优化性能:其他建议
吉特思米(gitusme)
WPF.NET专栏wpf.net性能优化c#
本文内容画笔的不透明度与元素的不透明度导航到对象对大型3D图面进行命中测试CompositionTarget.Rendering事件避免使用ScrollBarVisibility=Auto配置字体缓存服务以缩短启动时间本主题提供其他的性能改进建议。1、画笔的不透明度与元素的不透明度使用Brush设置元素的Fill或Stroke时,最好设置Brush.Opacity值而不是设置元素的Opacity属
- 学习Android的第五天
世俗ˊ
Android学习android
目录AndroidConstraintLayout约束布局简介ConstraintLayout约束布局分类1、相对定位(Relativepositioning)2、边距(Margins)3、居中定位和偏向(Centeringpositioningandbias)4、环形定位(Circularpositioning)5、对可见性的处理(Visibilitybehavior)6、尺寸约束(Dimens
- Web前端105天-day09-CSS
smile陌辰
CSS开发语言前端css
day09目录前言一、复习二、CSS3高级选择器1.属性选择器2.结构性伪类选择器3.目标伪类选择器三、弹性布局1.弹性布局的概念2.flflex容器的指定3.容器属性之主轴方向4.容器属性之项目在容器中的换行5.容器属性之主轴对齐方式方式6.容器属性之交叉轴对齐7.项目属性之项目排序总结前言第九天学习开始一、复习隐藏和显示完全消失display:none隐藏占位visibility:hidden
- 极狐GitLab 与 Datadog 的集成配置
极小狐
gitlab服务器运维
Datadog集成引入于14.1版本。此集成使您能够将CI/CD流水线和作业信息发送到Datadog。Datadog的CIVisibility产品可帮助您监控作业失败和性能问题,然后对其进行故障排除。它基于Webhook,只需要在极狐GitLab上进行配置。配置集成具有管理员角色的用户可以在项目、群组或实例级别配置集成:如果您没有DatadogAPI密钥:登录Datadog。转到集成部分。在API
- Android14 WMS 窗口布局流程performSurfacePlacement
jinyanmei_335
android
在WMS启动的时候,就创建了WindowSurfacePlacer对象,该对象专门用来执行窗口Surface的“摆放”操作。标题 publicintrelayoutWindow(Sessionsession,IWindowclient,LayoutParamsattrs,intrequestedWidth,intrequestedHeight,intviewVisibility,in
- Android中状态栏颜色及字体颜色修改
仍旧热忱_3619
//设置状态栏字体颜色ViewstateView=getWindow().getDecorView();if(stateView!=null){intvis=stateView.getSystemUiVisibility();//vis|=View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;//黑色vis&=~View.SYSTEM_UI_FLAG_LIGHT_STATUS_
- js判断用户进入和离开当前页面
奶瓶SAMA
VisibilityChange事件;用于判断用户是否离开当前页面//页面的visibility属性可能返回三种状态//prerender,visible和hiddenletpageVisibility=document.visibilityState;//监听visibilitychange事件document.addEventListener('visibilitychange',functi
- 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发布消息