- 用java实现word(docx)转换为pdf格式文档(简单版)
xiaoxiaobaozhu
javawordpdf
导入依赖com.documents4jdocuments4j-local1.0.3com.documents4jdocuments4j-transformer-msoffice-word1.0.3代码//word文档替换成pdf文档privatestaticvoidreplaceWordToPdf(StringwordPath,StringpdfPath){FileinputWord=newFil
- python利用matplotlib画图
湘妞妞
matplotlibpython开发语言
一、折线图importmatplotlib.pyplotasplty1=[10,13,5,40,30,60,70,12,55,25]x1=range(0,10)x2=range(0,10)y2=[5,8,0,30,20,40,50,10,40,15]plt.plot(x1,y1,label='Fristline',linewidth=3,color='r',marker='o',markerfac
- mysql用函数调用存储过程_mysql 函数 调用 存储过程
weixin_39585974
mysql用函数调用存储过程
Mysql高级之存储过程原文:Mysql高级之存储过程概念类似于函数,就是把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储过程来实现.在封装的语句体里面,可以用if/else,case,while等控制结构.可以进行sql编程.在mysql中,存储过程和函数...文章杰克.陈2014-11-14657浏览量Mysql函数(function)|存储过程(procedure)funct
- 实现python命令行
FLY@CYX
python服务器linux
如何在python程序中自定义python命令行输入参数及相关提示呢?让我们来学习一下吧。1.首先明确用到的模块,要导入optparse和sys模块,前者用于解析参数,后者用于获取终端参数。2.其次编写readcommand函数,具体实现如代码所示,大致流程可理解为:编写提示词->添加可选参数项->解析参数,并取得参数->返回处理参数后得到的字典,便于后续调用。importsysdefdefaul
- selenium保留网页登陆信息(保留用户数据)
叶不休
seleniumchrome测试工具python开发语言
找到谷歌浏览器存放缓存信息的目录打开谷歌浏览器访问chrome://version/找到这个路径,把结尾的default去掉#导入模块fromseleniumimportwebdriver#添加保持登录的数据路径:安装目录一般在C:\Users\****\AppData\Local\Google\Chrome\UserDatauser_data_dir=r'C:\Users\ASUS\AppDat
- KaiOS 4.0 APN List 界面加载debug
Dic-
KaiOSTelephony#DataNetwork(APN)自学笔记KaiOSAPNjavascript
问题背景在列表选中APN进入编辑后,退出返回列表界面时无法焦点选中编辑的APN。代码分析路径:gaia/apps/settings/js/panels/apn_list/panel.js分析SettingsPanel界面加载的步骤逻辑onBeforeShow->onShow->onBeforeHide->onHidereturnSettingsPanel({//初始化onInit:function
- C# 委托Delegate的用法及将方法当参数传递的理解
luckyext
c#开发语言后端
委托Delegate定义了方法的类型,使得可以将方法当做另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,使得程序具有更好的可扩展性。委托是一个引用类型,它保存的不是实际值,而是对函数(function)的引用。通过以下示例帮大家理解1.定义委托publicdelegatevoidMyDelegate(intvalue);2.可以把该委托声明当作变量类型传给函数publicvoidDoS
- Bootstrap Blazor 实战 Dialog 对话框组件快速入门
Densen2014
BootstrapBlazorBlazor组件Blazorhtml5bootstrap.net
官方文档1.注入服务DialogService@injectDialogServiceDialogService或者后置代码[Inject][NotNull]privateDialogService?DialogService{get;set;}2.弹出说明awaitDialogService.Show(newDialogOption(){Title="运行结果",IsScrolling=true
- 基于Python实现的缓存淘汰替换策略算法,该算法将缓存分区
go5463158465
算法pythonpython缓存算法
以下是一个基于Python实现的缓存淘汰替换策略算法,该算法将缓存分区,并根据不同分区的优先级进行淘汰,同时会自适应地调整缓存汰换的时机和力度,还会与GPTCache自带的LRU和FIFO策略进行对比。importtimefromgptcache.managerimportCacheBase,VectorBase,get_data_managerfromgptcache.processor.pre
- 正则表达式(竞赛篇)
alien爱吃蛋挞
Javajava
为了更深入了解正则表达式,我们需要首先学习与正则表达式有关的类以及方法。如Pattern和Matcher类,以及部分字符串方法。我们这里先将简单的字符串方法(String类)进行讲解在Java中,String类提供了许多用于字符串操作的方法,其中matches()、split()和replaceAll()等方法是非常有用的几个。这些方法在进行字符串匹配、分割和替换操作时非常高效。同时,Java也提
- 力扣-二叉树-257 二叉树的所有路径
夏末秋也凉
力扣#二叉树leetcode算法
思路除去根节点,每一层添加->val,然后使用前序遍历的顺序代码classSolution{public:vectorres;voidgetTreePaths(strings,TreeNode*root){s+="->";s+=to_string(root->val);if(root->left==nullptr&&root->right==nullptr){res.push_back(s);re
- LeetCode热题100(Hot100) 每日题目记录)_JavaScript实现_2022-4-24 周末总结
Papper_Shark
力扣热题100javascriptleetcode
2022-4-24周末总结方法:模拟LeetCode思路出现1的时候就记录1的索引,然后和之前出现1的索引位置进行比较,遍历完的最大值就是要找的值。代码实现/***@param{number}n*@return{number}*/constbinaryGap=function(n){lettemp=n.toString(2)letres=0for(leti=0,preIndex=0;in则说明末尾
- 同.NET 8一起发布的C#12语法中新特性及用法演示
yuanpan
.netc#开发语言
1.主构造函数(PrimaryConstructors)简化构造函数定义,允许在类或结构中直接声明构造函数参数。示例:csharppublicclassPerson(stringname,intage){publicstringName=>name;publicintAge=>age;}2.集合表达式(CollectionExpressions)提供更简洁的集合初始化语法,适用于数组、列表等集合类
- 爬虫自动化之drissionpage实现随时切换代理ip
十一姐
python爬虫逆向案例中高级爬虫自动化代理
目录一、视频二、dp首次启动设置代理三、dp利用插件随时切换代理一、视频视频直接点击学习SwitchyOmega插件使用其它二、dp首次启动设置代理fromDrissionPageimportChromiumPage,ChromiumOptionsfromloguruimportloggerco
- Kotlin:Kotlin类与对象
kkchenjj
工业软件二次开发全集kotlin微信开发语言
Kotlin:Kotlin类与对象Kotlin类的基础1.定义Kotlin类在Kotlin中,定义一个类非常直观。使用class关键字后跟类名,然后在大括号{}中定义类的主体。类可以包含属性、方法、构造函数等。//定义一个简单的Person类classPerson(valname:String,varage
- 【鸿蒙】ArkUI-X跨平台问题集锦
两块三刀
ArkUI-XHarmonyOSharmonyos
系列文章目录【鸿蒙】ArkUI-X跨平台问题集锦文章目录系列文章目录问题集锦1、HSP,HAR模块中无法引入importbridgefrom'@arkui-x.bridge';2、CustomDialog自定义弹窗中的点击事件在Android中无任何响应;3、调用buildRouterMode()路由跳转页面前,必须手动import('/*page')页面。无法自动导入?4、主题Android\i
- 实现多线程对同一个变量线程共享
贺公子之数据科学与艺术
JavaWebjava开发语言
在Java中,可以使用synchronized关键字或ReentrantLock类来解决多线程访问同一个变量时可能出现的数据不一致问题。以下是使用synchronized关键字的示例代码:publicclassThreadExample{privatestaticintcount=0;publicstaticvoidmain(String[]args){Runnabletask=()->{for(
- 鸿蒙Harmony应用开发—ArkTS-应用级变量的状态管理
代码与思维
鸿蒙-ArkTS鸿蒙harmonyos华为android鸿蒙鸿蒙系统ArkTS
状态管理模块提供了应用程序的数据存储能力、持久化数据管理能力、UIAbility数据存储能力和应用程序需要的环境状态。说明:本模块首批接口从APIversion7开始支持,后续版本的新增接口,采用上角标单独标记接口的起始版本。本文中T和S的含义如下:类型描述TClass,number,boolean,string和这些类型的数组形式。Snumber,boolean,string。AppStorag
- Kotlin 入门教程:基本数据类型
月入鱼饵
Kotlin入门教程kotlin开发语言
本文介绍Kotlin基本数据类型。所有代码均可在Kotlin官方在线代码调试器运行,部分代码下方也会提供链接直达。专栏《零基础入门Kotlin》持续更新中,欢迎订阅!目录1.概览2.数据类型声明2.1显式类型声明2.2.隐式类型声明(类型推理)3.整型4.浮点数5.布尔值(Boolean)6.字符和字符串6.1字符(Char)6.2字符串(String)6.2.1声明6.3.2其它语法部分参考资料
- Face ID(面部识别)和Touch ID(指纹识别)生物识别的使用iOS (附完整代码)
QNMJD
FaceIDTouchIDiOSios安全
越来的多的项目使用了FaceID(面部识别)和TouchID(指纹识别),不得不说确实很方便。最近整理了一下完整的使用方法,放在下面。运行效果:识别中效果下面是代码实现步骤一,首先我们需要引入头文件#import,这个框架里封装了我们需要的生物识别模块。#import步骤二,判断设备是否支持FaceID(面部识别)和TouchID(指纹识别)//创建LAContextLAContext*conte
- 【无标题】
Fansv587
数据结构
牛客刷题记录错题Java只能输入零和非零开头的数字,正确的正则表达式是:^(0|[1-9][0-9]*)$在一个有8个int数据的数组中,随机给出数组的数据,找出最大和第二大元素一定需要进行(9)次比较:Whichstatementdeclaresavariableawhichissuitableforreferringtoanarrayof50stringobjects?在java中,声明一个数
- pg建表和建索引
cyw8998
python开发语言
java代码:packagecom.geo.mine.util;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Statement;publicclassCreateTableAndOther{//PostgreSQL数据库的JDBCURLString
- vue3读取webrtc-stream 视频流
cyw8998
webrtc
一.首先下载webrtc-stream,方便自己本地搭建视频流服务https://download.csdn.net/download/cyw8998/90373521解压后,启动命令webrtc-streamer.exe-H127.0.0.1:8020二.vue3代码如下videoimport'@/assets/adapter.min.js';import'@/assets/webrtcstre
- CTF-WEB: 利用iframe标签利用xss,waf过滤后再转换漏洞-- N1ctf Junior display
A5rZ
网络安全
核心逻辑//获取URL查询参数的值functiongetQueryParam(param){//使用URLSearchParams从URL查询字符串中提取参数consturlParams=newURLSearchParams(window.location.search);//返回查询参数的值returnurlParams.get(param);}//使用DOMPurify对内容进行清理(sani
- 最长等差数列
青釉Oo
算法算法leetcodejava数据结构动态规划
题目链接最长等差数列题目描述注意2map=newHashMap<>();map.put(0+"_"+0,1);for(inti=1;i
- 【Python技巧】inspect函数帮助获取对象的信息
半度、
杂项python开发语言
inspect官方文档inspect模块提供了一些有用的函数帮助获取对象的信息,例如模块、类、方法、函数、回溯、帧对象以及代码对象。例如它可以帮助你检查类的内容,获取某个方法的源代码,取得并格式化某个函数的参数列表,或者获取你需要显示的回溯的详细信息。该模块提供了4种主要的功能:类型检查、获取源代码、检查类与函数、检查解释器的调用堆栈。importinspect#testfuncdeffunc1(
- Qt QMainWindow 自定义标题栏
maomao171314
杂项qt自定义标题栏QMainWindow
MainWindow.h#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include#include#include#include#includeclassMainWindow:publicQMainWindow{Q_OBJECTpublic:explicitMainWindow(QWidget*parent=nullptr);~MainWindow();prot
- Java 字符编码与解码:深入理解 Charset 类
magic 245
java基础java开发语言
目录引言一、什么是字符集(Charset)?二、Charset类的核心功能1.获取字符集实例2.编码与解码示例1:字符串转字节数组示例2:处理不同字符集的乱码问题3.字符集检测与支持三、Charset类的常用方法1.静态方法(1)staticCharsetforName(StringcharsetName)(2)staticCharsetdefaultCharset()(3)staticboole
- 【Android知识笔记】Handler机制(二)
川峰
Android知识笔记androidHandler线程通信
Handler消息延时是怎么实现的看下面几个问题:1)消息延时是做了什么特殊处理么?2)是发送延时了,还是消息处理延时了?3)延时精度怎么样?Handler.sendMessageDelayed()方法:publicfinalbooleansendMessageDelayed(@NonNullMessagemsg,longdelayMillis){
- 微信小程序自定义tabbar跳转出错
crack_ff
小程序小程序bug
这是正常情况不正常情况是点击几次tabbar之后页面会错乱,导致图标显示和内容不一致,但是点击换页没有问题解决办法:在显示页的onshow函数中添加如下代码if(typeofthis.getTabBar==='function'&&this.getTabBar()){this.getTabBar().setData({selected:1})}selected是页面的tabbar的index。讲的
- 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发布消息