- Systrace 学习笔记
程序员Android
androidjava操作系统epoll移动开发
和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、Systrace简介二、Systrace预备知识三、Why60fps四、SystemServer解读五、SurfaceFlinger解读六、Input解读七、Vsync解读八、Vsync-App:基于Choreographer的渲染机制详解九、MainThread和RenderThread解读十、Bin
- pytorch 机械臂逆运动学迭代数值解
chase。
机器人机器人
https://github.com/UM-ARM-Lab/pytorch_kinematics分享一个求解运动学逆解的第三方库pytorch_kinematics,以下是我写的一份集成样例。importsysimportitertoolsimporttypingfromconcurrent.futuresimportThreadPoolExecutor,as_completedfromconte
- Springboot项目中线程池使用整理
m0_74823715
面试学习路线阿里巴巴springboot后端java
文章目录Springboot项目中线程池使用整理学习目标线程池类型及特点Java基础线程池SpringThreadPoolTaskExecutorThreadPoolTaskExecutorvsThreadPoolExecutor主要区别@Async注解使用AsyncConfigurer接口CompletableFuture线程池实现方式比较1.Spring@Bean方式2.AsyncConfig
- 线程进程的通信
窜天猴牛逼
算法
一、前情回顾voidperror(constchar*s);功能:参数:二、资源竞争1.多线程访问临界资源时存在资源竞争(存在资源竞争、造成数据错乱)临界资源:多个线程可以同时操作的资源空间(全局变量、共享内存)解决:互斥:多个线程访问临界资源时,进行排他性访问。(同一时刻只允许一个线程对该临界资源进行访问)互斥锁:解决多线程访问临界资源时,存在资源竞争。1.创建pthread_mutex_tmu
- springboot中配置logback-spring.xml
web13688565871
面试学习路线阿里巴巴springspringbootlogback
一、在src/main/resources目录下,也就是在classpath路径下创建logback-spring.xml注:springboot框架自动配置,如果更换名称,可在配置文件指定该文件即可-->%d{yyyy-MM-ddHH:mm:ss}[%thread]%-5level%logger{80}-%msg%n${log_dir}/info.logINFOACCEPTDENY${log_d
- Qt 多线程误区:QThread 任务未正确执行及收尾回调未触发的原因分析
丰年稻香
QTqt
问题背景在开发Qt项目时,我们希望并行执行多个任务来提高效率,并在所有任务完成后进行收尾处理。为此,我们使用QThread来执行任务,并在QThread::finished事件触发时调用收尾函数。原始代码voidMyClass::runTaskInThread(void(MyClass::*task)(),void(MyClass::*onFinished)()){QThread*thread=n
- 《Operating System Concepts》阅读笔记:p159-p161
操作系统
《OperatingSystemConcepts》学习第16天,p159-p161总结,总计3页。一、技术总结1.thread(1)定义AthreadisabasicunitofCPUutilization;itcomprisesathreadID,aprogramcounter(PC),aregisterset,andastack.Aprocesscontrolstructurethatisan
- android中kotlin协程和线程的关系
儿歌八万首
androidkotlinandroidkotlin
一.子线程和主线程的频繁切换假设现在有这样的一个业务逻辑,有3个耗时操作,耗时1函数执行完毕后,我们需要调用函数1更新UI,再执行耗时2函数,执行完毕后我们在调用函数2更新UI,最后执行耗时3函数,再调用函数3更新UI。1.定义3个不同的耗时操作函数和3个更新UI的函数funioCode1(){println("我是IO线程1==${Thread.currentThread().name}")}f
- python网络爬虫——爬取新发地农产品数据
张謹礧
python网络爬虫python爬虫开发语言
这段代码是一个爬取新发地蔬菜价格信息的程序,它使用了多线程来加快数据获取和解析的速度。具体的步骤如下:导入所需的库:json、requests、threading和pandas。初始化一些变量,包括页数、商品总列表以及存放json数据的列表。定义了一个函数url_parse(),用于发送请求并解析网页数据。函数使用requests.post()方法发送POST请求,获取商品信息,并将其保存到jso
- Java 线程池详解
一点多余.
java开发语言
什么是线程池?线程池是一种管理一系列线程的资源池。当有任务需要处理时,线程池会直接从池中获取可用线程来执行任务。任务处理完后,线程不会被销毁,而是返回线程池,等待下一个任务的到来。线程池的好处减小资源消耗:通过重用线程,减少频繁创建和销毁线程的开销。提高响应速度:任务提交后,无需等待线程创建,可以立即执行。可管理性:实现对线程的统一管理,便于监控和调试。如何创建线程池1.使用ThreadPoolE
- 第四天----线程
唯瑞主义
嵌入式应用开发linucc
线程控制Linux中的线程是指轻量级的执行单元,相比于进程,具有以下特点:(1)进程(Process)是正在执行的程序的实例。每个进程都有自己的地址空间、代码段、数据段和打开的文件描述符等资源。线程(Thread)是进程内的一个执行单元,它共享相同的地址空间和其他资源,包括文件描述符、信号处理等,但每个线程都有自己的栈空间。(2)由于共享地址空间和数据段,同一进程的多线程之间进行数据交换比进程间通
- Python学习总结
学学睡觉
python学习开发语言
客户端与服务端聊天窗口服务端导入wxPython用于创建图形界面。socket用于网络通信,AF_INET是IPv4地址族,SOCK_STREAM表示流式套接字(TCP)。利用wxPython创建图形界面,并通过socket与服务器通信。主要功能:连接服务器。发送和接收消息。断开连接。界面上有文本框和按钮来操作。wxPython处理UI部分,socket处理网络通信。importthreading
- 《Operating System Concepts》阅读笔记:p162-p176
操作系统
《OperatingSystemConcepts》学习第17天,p162-p176总结,总计15页。一、技术总结1.thread(1)定义AthreadisabasicunitofCPUutilization;itcomprisesathreadID,aprogramcounter(PC),aregisterset,andastack.Aprocesscontrolstructurethatisa
- Android多线程实现
师范大学生
androidjava
Android基础的多线程实现方式主要有两种,一种是创建一种线程类并直接继承Thread类,重写其run函数实现线程功能,第二种是实现Runnable接口,通过线程辅助类实现线程功能。继承Thread类该方式实现的方法比较简单:1.自定义一个类,令该类继承Thread类。2.在该类中重写run方法,在其中实现线程的功能。3.实例化该类,调用start方法启动线程代码实例假设使用两个线程进行计数操作
- TCP网络编程库——Muduo库
青春:一叶知秋
网络tcp/ip服务器
目录1,Muduo库的说明2,Muduo库的主要组件3,Muduo常用的类接口4,Muduo库的代码运用5、Muduo库的工作流程6、特点与优势1,Muduo库的说明Muduo库是一个基于非阻塞IO和IO多路复用的C++高并发TCP网络编程库,它基于Reactor模式实现,并支持多线程并发处理的网络库,使用的线程模型是oneloopperthread。注意:Reactor模式和oneloopper
- C#调用企业微信机器人推送数据(文字)
请熟读并背诵文档
企业微信机器人信息推送c#企业微信机器人
--WeChatRobotMessageSender类用于封装与企业微信机器人发送Markdown消息相关的操作usingNewtonsoft.Json;usingSystem;usingSystem.Net.Http;usingSystem.Text;usingSystem.Threading.Tasks;namespace企业微信接口测试{//WeChatRobotMessageSender类
- 【AHK】资源管理器自动化办公实例/自动连点设置
LAM LAB
AHK自动化运维
此处为一个自动连续点击打开检查的自动化操作案例,没有quicker的鼠键录制,不常用了,做个备份#MaxThreadsPerHotkey2;这个是核心!!!!确保可以同时运行多个热键或标签globalisRunning:=truef4::;假设我们使用Ctrl+J作为热键来切换循环的状态if(isRunning){isRunning:=falseMsgBox,循环已停止}else{isRunnin
- C#学生管理系统 进阶(通过接口,继承接口的类,实现接口约束_对List中存储的数据进行排列)
HH牛码
C#练习题C#c#
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Security.Cryptography;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Xml.Linq;namespace_3.List学生管理系统{internalclassPro
- MFC线程
rainbow_lucky0106
C\C++\QT\MFCmfc线程
创建线程HANDLEm_hThread;m_hThread=CreateThread(NULL,0,save_snapshot,(LPVOID)this,0,&iThreadId);开启线程循环等待DWORDWINAPIsave_snapshot(LPVOIDpVoid){while(true){//持续循环等待事件到达。接收到事件信号后才进入if。if(::WaitForSingleObject
- 坚持学习100天:MFC多线程开发
smile- sunshine
编程语言C++笔记mfc学习c++
前言Hello,我是修齊。学习C++的第一百零二十六天,5.18的今天,520快到了,要去花店买两朵玫瑰,用心学习。在这里记录一些学习的东西和学习的心情,内容主要是一些自己学习整理的小笔记。一、类CWinThread1.MFC,用类CWinThread的对象来表示一个线程,每个MFC程序的主线程都有一个继承自CWinApp的应用程序类,而CWinApp继承自CWinThread。2.类CWinTh
- MFC的用户界面线程
CodingLife99
javaandroidc++多线程spring
一.简单认识MFC中将线程分为用户界面线程和工作线程,两者最大的区别是前者是和界面相关联的,而后者是进行后台的一些操作.二.如何创建MFC中的线程大多继承自CWinThread,而相关联的界面可以继承自CFrameWnd,也可以继承自对话框之类的(感觉只要是界面类,就可以吧).它的创建过程大概是这样的:1.在主线程中建立用户界面线程,比如这里是CMyThread类型的.2.在CMyThread::
- 多线程3:MFC中用户界面线程的相关操作
智能与优化
多线程mfcuic++开发语言windows
文章目录前言一、工作线程与界面线程的区别1.在子线程中创建模态对话框2.在子线程中创建非模态对话框二、界面线程1.界面线程的创建总结前言多线程3:MFC中用户界面线程的相关操作。一、工作线程与界面线程的区别工作线程与界面线程主要是针对MFC中的线程来说的。默认情况下,通过CreateThread函数创建出来的线程都为工作线程。MFC中的函数AfxBeginThread有两种重载方式,一是创建工作线
- opencv 自适应阈值
虚假程序设计
opencv人工智能计算机视觉
需要安装扩展库opencv-contrib-pythonCV_class.pyimportcv2importnumpyasnp#importserialimportos,sysfromdatetimeimportdatetimeimport_threadimportthreadingimporttimeimportwin32ui#只有windows能用.#fromCV_classimport*de
- 扑克强化学习:DouZero/douzero/dmc/dmc.py (train)
强化学习曾小健
python人工智能深度学习
deftrain(flags):"""Thisisthemainfuntionfortraining.Itwillfirstinitilizeeverything,suchasbuffers,optimizers,etc.Thenitwillstartsubprocessesasactors.Then,itwillcalllearningfunctionwithmultiplethreads.""
- Python 多线程
Don-ML
Pythonpython多线程线程
多线程类似于同时执行多个不同程序。Python中使用线程有两种方式:函数或者用类来包装线程对象。函数式:调用_thread模块中的start_new_thread()函数来产生新线程。语法如下:_thread.start_new_thread(function,args[,kwargs])参数说明:function-线程函数。args-传递给线程函数的参数,他必须是个tuple类型。kwargs-
- Python 并发编程:线程详解
风因絮
Python进阶知识python开发语言
在Python中,默认每个Python文件会创建一个进程,用于提供运行资源和环境。进程启动后,会创建一个主线程,用于执行程序代码。线程是并发编程的核心之一,本文将详细解析Python中线程的基础概念、常见操作、线程安全以及线程池的使用。一、线程基础1.什么是线程?线程是计算机中可以被CPU调度的最小单位。每个线程在程序中独立运行,多个线程可以并发执行。在Python中,线程由threading模块
- 深入Android HandlerThread 使用及其源码完全解析
ThreadLocalForrest
androidjavaui
本篇我们将来给大家介绍HandlerThread这个类,以前我们在使用线程执行一个耗时任务时总会new一个Thread的线程去跑,当任务执行完后,线程就会自动被销毁掉,如果又由新的任务,我们又得新建线程.....我们假设这样的一个情景,我们通过listview去加载图文列表,当我们往下滑动时,这时需要不断去请求网络资源,也就是需要不断开线程去加载网络资源,如果每次都new一个Thread,这显然是
- 在DataGridView创建按钮列,点击按钮显示下拉框并对样片名称进行排序,点击下拉框内容定位到对应位置
CallZhang210
c#
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Text.RegularExpressions;usingSystem.Threading.
- c#学习笔记
一抓掉一大把
c#
静态变量,实例变量,类的引用usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingDemo;namespacestudytest//命名空间{classProgram//类{test1test=newtest1();//引用别的类的
- selenium 调用chrome driver 报错
feelxing
seleniumseleniumchromechromedriver
一、配置Systeminfo:host:'MEV-PC',ip:'192.168.1.2',os.name:'Windows7',os.arch:'amd64',os.version:'6.1',java.version:'1.8.0_112'chromedrivert2.9selenium-java版本3.31二、运行代码三、错误Exceptioninthread"main"org.openqa
- Enum 枚举
120153216
enum枚举
原文地址:http://www.cnblogs.com/Kavlez/p/4268601.html Enumeration
于Java 1.5增加的enum type...enum type是由一组固定的常量组成的类型,比如四个季节、扑克花色。在出现enum type之前,通常用一组int常量表示枚举类型。比如这样:
public static final int APPLE_FUJI = 0
- Java8简明教程
bijian1013
javajdk1.8
Java 8已于2014年3月18日正式发布了,新版本带来了诸多改进,包括Lambda表达式、Streams、日期时间API等等。本文就带你领略Java 8的全新特性。
一.允许在接口中有默认方法实现
Java 8 允许我们使用default关键字,为接口声明添
- Oracle表维护 快速备份删除数据
cuisuqiang
oracle索引快速备份删除
我知道oracle表分区,不过那是数据库设计阶段的事情,目前是远水解不了近渴。
当前的数据库表,要求保留一个月数据,且表存在大量录入更新,不存在程序删除。
为了解决频繁查询和更新的瓶颈,我在oracle内根据需要创建了索引。但是随着数据量的增加,一个半月数据就要超千万,此时就算有索引,对高并发的查询和更新来说,让然有所拖累。
为了解决这个问题,我一般一个月会进行一次数据库维护,主要工作就是备
- java多态内存分析
麦田的设计者
java内存分析多态原理接口和抽象类
“ 时针如果可以回头,熟悉那张脸,重温嬉戏这乐园,墙壁的松脱涂鸦已经褪色才明白存在的价值归于记忆。街角小店尚存在吗?这大时代会不会牵挂,过去现在花开怎么会等待。
但有种意外不管痛不痛都有伤害,光阴远远离开,那笑声徘徊与脑海。但这一秒可笑不再可爱,当天心
- Xshell实现Windows上传文件到Linux主机
被触发
windows
经常有这样的需求,我们在Windows下载的软件包,如何上传到远程Linux主机上?还有如何从Linux主机下载软件包到Windows下;之前我的做法现在看来好笨好繁琐,不过也达到了目的,笨人有本方法嘛;
我是怎么操作的:
1、打开一台本地Linux虚拟机,使用mount 挂载Windows的共享文件夹到Linux上,然后拷贝数据到Linux虚拟机里面;(经常第一步都不顺利,无法挂载Windo
- 类的加载ClassLoader
肆无忌惮_
ClassLoader
类加载器ClassLoader是用来将java的类加载到虚拟机中,类加载器负责读取class字节文件到内存中,并将它转为Class的对象(类对象),通过此实例的 newInstance()方法就可以创建出该类的一个对象。
其中重要的方法为findClass(String name)。
如何写一个自己的类加载器呢?
首先写一个便于测试的类Student
- html5写的玫瑰花
知了ing
html5
<html>
<head>
<title>I Love You!</title>
<meta charset="utf-8" />
</head>
<body>
<canvas id="c"></canvas>
- google的ConcurrentLinkedHashmap源代码解析
矮蛋蛋
LRU
原文地址:
http://janeky.iteye.com/blog/1534352
简述
ConcurrentLinkedHashMap 是google团队提供的一个容器。它有什么用呢?其实它本身是对
ConcurrentHashMap的封装,可以用来实现一个基于LRU策略的缓存。详细介绍可以参见
http://code.google.com/p/concurrentlinke
- webservice获取访问服务的ip地址
alleni123
webservice
1. 首先注入javax.xml.ws.WebServiceContext,
@Resource
private WebServiceContext context;
2. 在方法中获取交换请求的对象。
javax.xml.ws.handler.MessageContext mc=context.getMessageContext();
com.sun.net.http
- 菜鸟的java基础提升之道——————>是否值得拥有
百合不是茶
1,c++,java是面向对象编程的语言,将万事万物都看成是对象;java做一件事情关注的是人物,java是c++继承过来的,java没有直接更改地址的权限但是可以通过引用来传值操作地址,java也没有c++中繁琐的操作,java以其优越的可移植型,平台的安全型,高效性赢得了广泛的认同,全世界越来越多的人去学习java,我也是其中的一员
java组成:
- 通过修改Linux服务自动启动指定应用程序
bijian1013
linux
Linux中修改系统服务的命令是chkconfig (check config),命令的详细解释如下: chkconfig
功能说明:检查,设置系统的各种服务。
语 法:chkconfig [ -- add][ -- del][ -- list][系统服务] 或 chkconfig [ -- level <</SPAN>
- spring拦截器的一个简单实例
bijian1013
javaspring拦截器Interceptor
Purview接口
package aop;
public interface Purview {
void checkLogin();
}
Purview接口的实现类PurviesImpl.java
package aop;
public class PurviewImpl implements Purview {
public void check
- [Velocity二]自定义Velocity指令
bit1129
velocity
什么是Velocity指令
在Velocity中,#set,#if, #foreach, #elseif, #parse等,以#开头的称之为指令,Velocity内置的这些指令可以用来做赋值,条件判断,循环控制等脚本语言必备的逻辑控制等语句,Velocity的指令是可扩展的,即用户可以根据实际的需要自定义Velocity指令
自定义指令(Directive)的一般步骤
&nbs
- 【Hive十】Programming Hive学习笔记
bit1129
programming
第二章 Getting Started
1.Hive最大的局限性是什么?一是不支持行级别的增删改(insert, delete, update)二是查询性能非常差(基于Hadoop MapReduce),不适合延迟小的交互式任务三是不支持事务2. Hive MetaStore是干什么的?Hive persists table schemas and other system metadata.
- nginx有选择性进行限制
ronin47
nginx 动静 限制
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;...
server {...
location ~.*\.(gif|png|css|js|icon)$ {
- java-4.-在二元树中找出和为某一值的所有路径 .
bylijinnan
java
/*
* 0.use a TwoWayLinkedList to store the path.when the node can't be path,you should/can delete it.
* 1.curSum==exceptedSum:if the lastNode is TreeNode,printPath();delete the node otherwise
- Netty学习笔记
bylijinnan
javanetty
本文是阅读以下两篇文章时:
http://seeallhearall.blogspot.com/2012/05/netty-tutorial-part-1-introduction-to.html
http://seeallhearall.blogspot.com/2012/06/netty-tutorial-part-15-on-channel.html
我的一些笔记
===
- js获取项目路径
cngolon
js
//js获取项目根路径,如: http://localhost:8083/uimcardprj
function getRootPath(){
//获取当前网址,如: http://localhost:8083/uimcardprj/share/meun.jsp
var curWwwPath=window.document.locati
- oracle 的性能优化
cuishikuan
oracleSQL Server
在网上搜索了一些Oracle性能优化的文章,为了更加深层次的巩固[边写边记],也为了可以随时查看,所以发表这篇文章。
1.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。(这点本人曾经做过实例验证过,的确如此哦!
- Shell变量和数组使用详解
daizj
linuxshell变量数组
Shell 变量
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
your_name="w3cschool.cc"
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
首个字符必须为字母(a-z,A-Z)。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用ba
- 编程中的一些概念,KISS、DRY、MVC、OOP、REST
dcj3sjt126com
REST
KISS、DRY、MVC、OOP、REST (1)KISS是指Keep It Simple,Stupid(摘自wikipedia),指设计时要坚持简约原则,避免不必要的复杂化。 (2)DRY是指Don't Repeat Yourself(摘自wikipedia),特指在程序设计以及计算中避免重复代码,因为这样会降低灵活性、简洁性,并且可能导致代码之间的矛盾。 (3)OOP 即Object-Orie
- [Android]设置Activity为全屏显示的两种方法
dcj3sjt126com
Activity
1. 方法1:AndroidManifest.xml 里,Activity的 android:theme 指定为" @android:style/Theme.NoTitleBar.Fullscreen" 示例: <application
- solrcloud 部署方式比较
eksliang
solrCloud
solrcloud 的部署其实有两种方式可选,那么我们在实践开发中应该怎样选择呢? 第一种:当启动solr服务器时,内嵌的启动一个Zookeeper服务器,然后将这些内嵌的Zookeeper服务器组成一个集群。 第二种:将Zookeeper服务器独立的配置一个集群,然后将solr交给Zookeeper进行管理
谈谈第一种:每启动一个solr服务器就内嵌的启动一个Zoo
- Java synchronized关键字详解
gqdy365
synchronized
转载自:http://www.cnblogs.com/mengdd/archive/2013/02/16/2913806.html
多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题。
同步机制可以使用synchronized关键字实现。
当synchronized关键字修饰一个方法的时候,该方法叫做同步方法。
当s
- js实现登录时记住用户名
hw1287789687
记住我记住密码cookie记住用户名记住账号
在页面中如何获取cookie值呢?
如果是JSP的话,可以通过servlet的对象request 获取cookie,可以
参考:http://hw1287789687.iteye.com/blog/2050040
如果要求登录页面是html呢?html页面中如何获取cookie呢?
直接上代码了
页面:loginInput.html
代码:
<!DOCTYPE html PUB
- 开发者必备的 Chrome 扩展
justjavac
chrome
Firebug:不用多介绍了吧https://chrome.google.com/webstore/detail/bmagokdooijbeehmkpknfglimnifench
ChromeSnifferPlus:Chrome 探测器,可以探测正在使用的开源软件或者 js 类库https://chrome.google.com/webstore/detail/chrome-sniffer-pl
- 算法机试题
李亚飞
java算法机试题
在面试机试时,遇到一个算法题,当时没能写出来,最后是同学帮忙解决的。
这道题大致意思是:输入一个数,比如4,。这时会输出:
&n
- 正确配置Linux系统ulimit值
字符串
ulimit
在Linux下面部 署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题;这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用 其实很容易就达到这个数量。下面说的是,如何通过正解配置来改正这个系统默认值。因为这个问题是我配置Nginx+php5时遇到了,所以我将这篇归纳进
- hibernate调用返回游标的存储过程
Supanccy2013
javaDAOoracleHibernatejdbc
注:原创作品,转载请注明出处。
上篇博文介绍的是hibernate调用返回单值的存储过程,本片博文说的是hibernate调用返回游标的存储过程。
此此扁博文的存储过程的功能相当于是jdbc调用select 的作用。
1,创建oracle中的包,并在该包中创建的游标类型。
---创建oracle的程
- Spring 4.2新特性-更简单的Application Event
wiselyman
application
1.1 Application Event
Spring 4.1的写法请参考10点睛Spring4.1-Application Event
请对比10点睛Spring4.1-Application Event
使用一个@EventListener取代了实现ApplicationListener接口,使耦合度降低;
1.2 示例
包依赖
<p