- Python Selenium打开Edge报错 SessionNotCreatedException: probably user data directory is already in use
samiya
pythonseleniumedge
fromseleniumimportwebdriverdriver=webdriver.Edge()driver.get('https://www.baidu.com/')初学selenium就遇到报错,倒在第一步orzselenium.common.exceptions.SessionNotCreatedException:Message:sessionnotcreated:probablyus
- 搭建Google WebDriver服务的教程
码农资源网
ubuntu
搭建GoogleWebDriver服务是进行Web自动化测试的第一步。以下是一个详细的教程,指导你如何在你的系统上搭建GoogleWebDriver服务。我们将以ChromeDriver为例,它是GoogleChrome浏览器的WebDriver实现。环境准备确保你已经安装了GoogleChrome浏览器:确保你安装了最新版本的GoogleChrome浏览器。你可以通过访问GoogleChrome
- Selenium自动化测试全解
Sally璐璐
Pythonselenium测试工具
目录Selenium简介主要特点核心组件详解1.WebDriver2.SeleniumIDE3.SeleniumGridPython环境下的详细配置安装过程基础配置示例完整操作示例及解析元素定位方法详解1.ID定位2.类名定位3.CSS选择器定位4.XPath定位5.链接文本定位6.标签名定位7.Name属性定位最佳实践建议等待机制深度解析1.强制等待(不推荐)2.隐式等待(全局设置)3.显式等待
- playwright 防止WebDriver 被检测 被网站识别为爬虫设置
nongcunqq
python爬虫python开发语言
fromplaywright.sync_apiimportPlaywright,sync_playwrightplaywright=sync_playwright().start()browser=playwright.chromium.launch(headless=False)context=browser.new_context()page=context.new_page()##关闭Web
- 【appium】5. Appium WebDriver 支持的常用方法汇总
大卫软件测试
appium
下面是一个完整的AppiumWebDriver支持的常用方法汇总,并附上典型用法示例。一、元素查找方法/元素操作方法✅使用find_element()和find_elements()fromappiumimportwebdriverfromappium.webdriver.common.appiumbyimportAppiumBy#单个元素查找el=driver.find_element(by=A
- appium入门
影流之猫
pythonappium测试工具
Appium背景介绍Appium是由nodejs的express框架写的HttpServer,Appium使用WebDriver的jsonwire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium桌面客户端安装方式1.运行appium-desktop-Setup-1.2.7.exe,默认安装即可2.启动客户端,按图片步骤设置Appi
- 记录使用appium 2.0进行自动化总结
tnan2522
appium自动化运维爬虫python
1.自动化连接driver对象获取与关闭importsocketimportsubprocessimportrandomimporttimeimportatexitimportpsutilfromappiumimportwebdriverfromappium.options.androidimportUiAutomator2Optionsfromselenium.webdriver.support
- Selenium 识别验证码并自动登录
梦想blog
SpringBoot测试干货selenium测试工具自动化爬虫
org.seleniumhq.seleniumselenium-java3.1.0importcn.hutool.core.util.StrUtil;importcn.hutool.system.SystemUtil;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.chrome.ChromeDriver;importorg
- (14)java+ selenium->元素定位大法之By xpath上卷
程序员的世界你不懂
javaselenium开发语言
1.简介继续介绍WebDriver关于元素定位大法,方法:Byxpath。xpath的定位方法,非常强大。使用这种方法几乎可以定位到页面上的任意元素。2.什么是xpath?xpath是XMLPath的简称,由于HTML文档本身就是一个标准的XML页面,所以我们可以使用Xpath的用法来定位页面元素。XPath是XML和Path的缩写,主要用于xml文档中选择文档中节点。基于XML树状文档结构,XP
- Selenium工作原理
夏日玲子
测试工具web自动化selenium测试工具
Selenium工作原理Selenium是一个用于自动化Web浏览器操作的工具,主要用于测试Web应用程序。其核心工作原理涉及多个组件协作完成对浏览器的控制。核心组件SeleniumWebDriverWebDriver是Selenium的核心组件,直接与浏览器交互。它通过浏览器提供的原生支持或插件实现自动化操作。WebDriver使用各自浏览器特定的驱动程序(如ChromeDriver、Gecko
- TestCafe API
Thomas Kant
自动化测试testcafenode.js自动化测试框架
TestCafe全面指南:高效编写Web自动化测试的利器TestCafe是一个强大且易用的端到端测试框架,基于Node.js,无需WebDriver,支持多种主流浏览器,并能直接在命令行中运行。本文将带你深入了解TestCafe的核心概念、API用法、高级功能、最佳实践,并通过完整示例流程帮助你快速掌握自动化测试技能!一、核心概念解析1.1测试文件结构一个典型的TestCafe测试文件包含以下部分
- 使用Selenium WebDriver和Python入门自动化测试
慢慢的写代码
SeleniumWebDriverPython自动化测试
使用SeleniumWebDriver和Python入门自动化测试1.准备你的机器在开始使用SeleniumWebDriver和Python进行自动化测试之前,我们需要确保机器上已经安装了必要的软件和工具。以下是详细的准备工作步骤:1.1安装PythonPython是一个强大的编程语言,广泛应用于自动化测试领域。大多数Linux发行版、MacOSX和其他Unix机器上默认安装了Python。对于W
- Python网页自动化Selenium中文文档
淘小白_TXB2196
python自动化selenium网页自动化
1.安装1.1.安装SeleniumPythonbindings提供了一个简单的API,让你使用SeleniumWebDriver来编写功能/校验测试。通过SeleniumPython的API,你可以非常直观的使用SeleniumWebDriver的所有功能。SeleniumPythonbindings使用非常简洁方便的API让你去使用像Firefox,IE,Chrome,Remote等等这样的S
- Python获取网易云音乐的评论
图片代码importtimefromseleniumimportwebdriverfromselenium.webdriver.chrome.optionsimportOptionsfromselenium.webdriver.chrome.serviceimportServicefromwebdriver_manager.chromeimportChromeDriverManagerfromse
- selenium库实现批量爬取网页文章得到PDF
ph0ebus
pythonseleniumpython
引流博客(https://ph0ebus.github.io/)实现目的利用python的selenium库实现批量网站打印为PDF预备知识selenium库的简单了解浏览器的启动参数re库函数了解(re.complie,re.findall)js调用浏览器窗口代码实现importjsonimportrefromseleniumimportwebdriverchrome_options=webdr
- Selenium 和playwright 使用场景优缺点对比
2501_91537388
自动化selenium测试工具
1.核心对比概览特性SeleniumPlaywright诞生时间2004年(历史悠久)2020年(微软开发,现代架构)浏览器支持所有主流浏览器(需驱动)Chromium、Firefox、WebKit(内置引擎)执行速度较慢(依赖WebDriver通信)快(直接协议通信,无驱动依赖)自动等待机制需手动配置等待(显式/隐式等待)自动等待元素可交互(智能等待)多标签页/iframe处理复杂(需切换上下文
- python+appium测试ios
三幺四
pythonappiumios
1、环境准备Xcode(开发者账户、证书)、appium启动、appium-WebDriverServer(账户、标识唯一、iOS与设备一致)、Carthage(RoutingHTTPSeveriOS版本与设备一致)、手机进入开发者模式、手机连接并信任设备2、构建WebDriverServer、RoutingHTTPSever成功之后,需手动启用WebDriverAgent(端口号8100)xco
- selenium execute_script常用方法汇总
ZingKings
Seleniumselenium
driver.execute_script()是SeleniumWebDriver中非常强大且灵活的功能,可以用来执行任意的JavaScript代码在浏览器上下文中。以下是一些常用的execute_script()方法的例子和用法:修改元素的属性和值python#修改输入框的值driver.execute_script("arguments[0].value='你好'",element)#清空输入
- 爬虫selenium:unexpected keyword argument ‘options‘ & use options instead of chrome_options
Raina Chen
python开发语言爬虫seleniumchrome
在学习Python超强爬虫8天速成(完整版)爬取各种网站数据实战案例Day7-06.无头浏览器+规避检测时候老师演示的代码,遇到一些问题及解决过程,供分享和指点fromseleniumimportwebdriverfromtimeimportsleepfromselenium.webdriver.chrome.optionsimportOptionsfromselenium.webdriverim
- 43. 远程分布式测试实现
Tom Boom
分布式测试开发自动化测试框架开发分布式测试webdriver自动化
43.远程分布式测试实现详解一、远程测试环境配置1.1远程WebDriver服务定义#Chrome浏览器远程服务地址chrome_url=r'http://localhost:5143'#Edge浏览器远程服务地址edge_url=r'http://localhost:9438'关键概念:每个URL对应一个独立的WebDriver服务典型配置:localhost:本地服务192.168.1.100
- selenium基础操作
謹言
Python之web自动化seleniumpython软件测试web自动化
selenium基础操作#使用seleniumfromseleniumimportwebdriver#得到一个浏览器对象browser=webdriver.Chrome()#打开一个网页browser.get('http://www.douban.com')#打印标题print(browser.title)#打印URLprint(browser.current_url)#打印源码print(bro
- selenium基础
HAPPY酷
selenium测试工具
以下是整理后的Selenium操作介绍:基本操作定位元素使用By.ID定位:driver.find_element(By.ID,"page-mainIframe"),尽量使用id元素定位。定位多个元素:driver.find_elements(By.ID,"some_id")。刷新页面:使用refresh()方法刷新当前页面。等待机制显式等待:使用WebDriverWait类和expected_c
- Selenium的底层原理
CtrlCV 攻城狮
selenium测试工具
Selenium底层主要依赖于WebDriver协议(即W3CWebDriver规范,早期也有JSONWireProtocol)来实现对浏览器的远程控制,其核心架构可以分为以下几层:Selenium客户端(ClientLibrary)支持多种语言(Java、Python、C#、JavaScript等)。提供了一套统一的API,让测试脚本(如driver.find_element(...)、driv
- 测试面试必备:Web自动化测试中如何在不同的网页之间切换
二进制11
#自动化测试面试题面试软件测试自动化测试Web测试Selenium
自动化测试面试题-Web自动化测试中,如何在不同的网页之间切换?引言在现代Web自动化测试中,经常需要处理多个浏览器标签页或窗口之间的切换场景。本文将详细介绍如何使用SeleniumWebDriver在不同网页之间切换,并提供Java代码示例和流程图帮助理解这一过程。一、理解浏览器窗口和标签页在开始之前,我们需要明确几个概念:窗口(Window):浏览器的一个独立实例标签页(Tab):窗口内的一个
- selenium webdriverchrome driver集合整理128129130131132
m0_74823408
selenium测试工具
版本downloadlink120120下載121121下載122122下載123123下載124124下載125125下載126126系列版本下载:126.0.6478.63下载126.0.6478.61下载126.0.6478.55下载126.0.6478.126下载126.0.6478.182下載127127.0.6533.72下载127.0.6533.88下载127.0.6533.72下载
- 软件测试笔记|web自动化测试|显式等待和隐式等待的区别是什么?
阳哥整理软件测试笔记
web自动化测试自动化
显式等待和隐式等待都是在自动化测试中用于等待页面元素加载或特定条件满足的机制,但它们有以下区别:一、定义和实现方式隐式等待:•定义:隐式等待是一种全局设置,告诉WebDriver在尝试查找任何元素时,如果没有立即找到,就等待一段时间。•实现方式:通过在代码中设置一次隐式等待时间,例如使用Python的Selenium库时,可以这样设置隐式等待:driver.implicitly_wait(10),
- 隐式等待和显式等待的区别
小罗0912
html前端
显式等待WebDriverWait()是针对某个元素设定的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,如果在规定时间内没有加载出来那么就是会抛出TimeoutException使用场景:当打开一个新页面,执行第一个元素操作的时候;当某一步操作
- WebUI自动化测试
我要这脸有何用
测试自动化python爬虫
主要是selenium+pytest+POM一、selenium初始框架:#导入模块fromseleniumimportwebdriverfromtimeimportsleep#实例化浏览器对象driver=webdriver.Chrome()#打开网页driver.get('***.html')#展示效果sleep(3)#关闭页面driver.quit()元素定位#使用id定位element=d
- 作业-Python+selenium自动化测试登录126邮箱
Yioer-畘境
pythonselenium开发语言
fromtimeimportsleepfromseleniumimportwebdriverfromselenium.webdriver.support.waitimportWebDriverWaitdriver=webdriver.Chrome()#访问126邮箱网址driver.get("https://www.126.com/")#等待元素出现element=WebDriverWait(dr
- Python Selenium 一小时速通教程
TOWNST
pythonselenium开发语言
PythonSelenium一小时速通教程+实战案例一、环境配置(10分钟)安装Python确保已安装Python3.x(官网下载)。安装Selenium在终端运行:pipinstallselenium下载浏览器驱动Chrome:访问ChromeDriver官网,选择与浏览器版本匹配的驱动。Firefox:下载geckodriver。Edge:下载MicrosoftWebDriver。驱动放置位置
- 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发布消息