- Mybatis <trim>标签的基本使用
MYGAG
mybatis服务器运维
在MyBatis的标签中,prefix和suffixOverrides属性的行为如下:-prefix="SET":这意味着如果标签内部的任何条件成立(即,有任何内容被添加到SQL语句中),那么"SET"这个前缀就会被添加到生成的SQL语句的开始部分。无论标签内部有多少个条件成立,"SET"只会被添加一次。-suffixOverrides=",":这意味着如果标签内部的任何条件成立,生成的SQL语句
- docker-compose 启动MongoDB后 导入json数据
观梦
docker-composemongodbpythondockershell
docker-compose启动MongoDB后导入json数据compose目录具体方法Dockerfilesetup.shdocker-compose.ymlcompose目录├──app│├──blueprints││├──common…│├──config.py│├──Dockerfile│├──main.py│├──requirements.txt│├──templates││├──…│
- Kafka系列之:不删除Kafka Topic,清理Kafka Topic中的数据
快乐骑行^_^
KafkaKafka系列不删除KafkaTopic清理KafkaTopic数据
Kafka系列之:不删除KafkaTopic,清理KafkaTopic中的数据一、需求二、Java删除Topic中数据三、python删除Topic中数据一、需求需要清理topic中的数据但是不能通过删除topic删除数据,则采取基于topic的offset删除topic中的数据二、Java删除Topic中数据HashMapdeleteRecords=newHashMap<>();这一行创建了一个
- 反向遍历--当你修改一个元素的outerHTML时,该元素会被从 DOM 中移除
专注VB编程开发20年
htmljavascript
varspans=editor.querySelectorAll('span[mytag]');//将NodeList转换为数组//varspansArray=Array.from(spans);varid=0spans.forEach(span=>{span.outerhtml这里无法直接修改吗?}在JavaScript中,outerHTML是一个可写属性,但你需要注意以下几点:1.属性名大小写
- Feign 解码异常处理:解决 No Suitable HttpMessageConverter 问题
码傻啦弟
软件开发java开发语言Feignspringboot
一、问题场景与错误解析在使用SpringCloudFeign进行微服务间通信时,常遇到以下典型错误:feign.codec.DecodeException:Couldnotextractresponse:nosuitableHttpMessageConverterfoundforresponsetype[classXxxResponse]andcontenttype[text/plain;char
- PostgreSQL多字段排序+limit问题,数据重复问题
秦时明月之君临天下
PostgreSQL1024程序员节postgresqlsql数据库
在项目中:pgsql自定义函数,遇到for循环中limit出来的数据时重复的问题,经过排查发现是排序不彻底导致的。原sql:SELECT……ORDERBYtagrule.dimension,tagrule.MINVALUEASCLIMIT1OFFSETi;因为是在for循环中,offset的值每次i++,但是后面发现该SQL会查询出重复的数据。然后我就去掉limit,排查发现,当tagrule.d
- PostgreSQL 使用 OFFSET 分页时的数据一致性问题
心上之秋
在PostgreSQL中,使用OFFSET和LIMIT实现分页查询是一种常见的方法。然而,当分页查询执行时,如果有新数据插入或已有数据删除,可能会导致分页结果出现错乱或数据丢失的问题。一、OFFSET分页的工作原理OFFSET分页的基本语法如下:登录后复制SELECT*FROMtable_nameORDERBYcolumn_nameLIMITpage_sizeOFFSET(page_number-
- MySQL 使用order by limit 分页重复问题
我爱双面奶
SQLsql分页重复
一、问题描述执行以下sql,在数据没有插入删除的情况下,返回的数据可能不一致,导致线上出现重复数据selectxxxfromtablewherexxxorderbyxxxlimitoffset二、产生原因在mysql5.6版本,mysql对orderbylimit做了一个优化,使用了priorityqueue,priorityqueue使用的是堆排序策略,在排序过程中虽然还要对n个数据进行排序,但
- 使用LIMIT + OFFSET 分页时,数据重复的风险
码傻啦弟
软件开发oracle数据库服务器
在使用LIMIT+OFFSET分页时,数据重复的风险不仅与排序字段的唯一性有关,还与数据变动(插入、删除、更新)密切相关。以下是详细分析:一、数据变动如何导致分页异常1.插入新数据场景:用户在浏览第1页时,数据库插入了新记录。问题:新记录可能会"挤入"已浏览过的页面,导致后续页出现重复数据。示例:sql--初始数据(按ID排序)IDName1Alice2Bob3Charlie--第1页:LIMIT
- Android 自定义View 绘制一条颜色渐变,粗细渐变的线
nc_kai
笔记Android安卓
自定义View绘制一条颜色渐变,粗细渐变的线效果图如下:自定义View代码importandroid.annotation.SuppressLintimportandroid.content.Contextimportandroid.graphics.*importandroid.util.AttributeSetimportandroid.util.Logimportandroid.view.V
- Android 腾讯地图获取当前缩放级别
nc_kai
Android腾讯地图android
Android腾讯地图获取当前缩放级别tencentMap.setOnCameraChangeListener(newTencentMap.OnCameraChangeListener(){@OverridepublicvoidonCameraChange(CameraPositioncameraPosition){}@OverridepublicvoidonCameraChangeFinishe
- Vue计算属性(computed)全面解析:原理、用法与最佳实践
雪碧聊技术
uniappvue.js前端javascriptcomputed
目录前言一、计算属性基础概念1.什么是计算属性2.基本语法3.简单示例二、计算属性的核心特性1.响应式依赖追踪2.缓存机制3.不可直接赋值三、计算属性vs方法1.基本区别2.性能对比3.何时使用方法四、计算属性的高级用法1.设置setter2.依赖多个数据源3.结合过滤器使用五、常见使用场景1.数据过滤与转换2.表单验证3.复杂条件判断4.动态样式计算六、计算属性的性能优化1.避免复杂计算2.减少
- 打开摄像头,服务器和客户端传输摄像头图像数据
qianshanxue11
qt图像处理
1:CameraServer主要功能,打开摄像头,接收客户端请求接收到客户端请求“R”字符后开始传输摄像头图像。#include"mainwindow.h"#include"ui_mainwindow.h"#includeMainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setu
- Python operator - Standard operators as functions
Yongqiang Cheng
Python3-Python2-CythonPythonoperatoroperatorsfunctions
Pythonoperator-Standardoperatorsasfunctions1.MappingOperatorstoFunctions2.In-placeOperatorsReferenceshttps://docs.python.org/3/library/operator.htmlTheoperatormoduleexportsasetofefficientfunctionscorr
- 数据结构与算法:贪心(二)
前言要加快速度啊!!一、最短无序连续子数组classSolution{public:intfindUnsortedSubarray(vector&nums){intn=nums.size();intMax=-1e9;intright=-1;//最右不符合的位置for(inti=0;inums[i])//遇到不符合递增规律的数{right=i;}Max=max(Max,nums[i]);}intMi
- vue3在外部js文件调用vue内的方法
熊抱抱的一粒
vue.jsjavascripthtml5
需求就是我在vue项目里有一个a.js文件,我想在a.js文件里调用b.vue里的test方法。直接上代码a.jsexportdefault{hotmockobjId:function(){//逻辑代码.......//调用b.vue的方法名test()}}b.vueimport{defineComponent,onMounted}from'vue'//引入方法setup(){onMounted(
- 11.2.0.4 awr快照无法正常生成
某日检查数据库性能,发现数据库awr快照没有正常生成咨询supportsr执行如下脚本DearCustomer,1.Pleaseprovidethebelowscriptoutputoninstance3:conn/assysdbasetpages1000setnum20altersessionsetnls_date_format='yyyy-mm-ddhh24:mi:ss';altersessi
- OL9.4安装19.27RAC记录
李曰福
Oracleoracle
更新-2025-06-09在上一次安装时,文档OracleDatabase19cProactivePatchInformation(DocID2521164.1)未给出GI_MRP的链接。安装DB_MRP失败。在PrimaryNoteforDatabaseQuarterlyReleaseUpdates(DocID888.1)找到了GI_MRP.上传到/stage目录后,并修改setup.ini,加
- 线性回归 python代码
黄涵奕
python线性回归numpy机器学习开发语言
下面是一个线性回归模型的Python代码示例:importnumpyasnpfromsklearn.linear_modelimportLinearRegression#训练数据x=np.array([[1],[2],[3],[4],[5]])y=np.array([5,7,9,11,13])#建立模型reg=LinearRegression().fit(x,y)#预测reg.predict(np
- 现代 C++ 容器深度解析及实践
mxpan
c++c++开发语言
一、线性容器:std::array与std::forward_list1.std::array:固定大小的高效容器在传统C++中,数组与vector的抉择常让人纠结:数组缺乏安全检查,vector存在动态扩容开销。C++11引入的std::array完美平衡了两者优势:特性解析:编译期确定大小,内存连续分配,访问效率与C数组一致;封装了迭代器、size()、empty()等标准接口,兼容STL算法
- Oracle数据库捕获造成死锁的SQL语句
GottdesKrieges
Oracle实践篇(三)数据库oraclesql
Oracle数据库捕获造成死锁的SQL语句通过系统视图通过alert日志和trace通过ASH或AWR报告构造一个简单的死锁场景。会话1修改ID=1的行:appuser1@ORA11G_0>updaterdr_npcsetage=33wherenpc_id=1;1rowupdated.--不提交,等待会话2修改ID=2的行会话2修改ID=2的行:
- C++从入门到放弃
一家之主呆呆蟹
C++c++
C++学习笔记--目录C++学习笔记1.C++命名空间2.继承与多态3.函数重载4.引用5.构造函数与析构函数6.初始化列表7.explicit关键字8.static静态成员和友元函数与友元类、内部类9.模板10.string11.vector12.List13.vector和list的区别及使用场景14.deque15.stack16.queue17.priority_queue18.set|m
- Python基础---面试题汇总
软件测试凡哥
Pythonpython开发语言面试经验分享程序人生
前言本文只涉及Python相关的面试题,面向中高级Python开发,太基本的题目不收录。更希望通过代码演示,原理探究等来深入讲解某一知识点,做到融会贯通。另外部分演示代码有兴趣的可以找我拿。语言基础篇Python的基本数据类型Python3中有六个标准的数据类型:Number(数字)(包括整型、浮点型、复数、布尔型等)String(字符串)List(列表)Tuple(元组)Set(集合)Dicti
- Linux与Windows切换使用Obsidian,出现 unexplained changes 问题的解决
CS-Polaris
业务能力技术栈git
如果你的Obsidian文档在Linux与Windows间来回切换,可能会涉及到文件的保存换行符问题,但这样的话就容易导致一个问题,那就是内容无差异,Obsidian却提示unexplainedchanges,Windows系统下的解决方法如下,找到.git/config文件,配置[core]bare=falseautocrlf=falsetrustctime=false一、参考文章或视频链接[1
- vscode C++环境配置(供自己查阅)
想要躺平的一枚
VSCODEvscode
目录前言一、配置文件1、.vscode(1)c_cpp_properties.json(2)tasks.json(3)launch.json(4)settings.json参考链接:link前言 vscode可以当成一种强大的编辑器,只能够写代码(像VS这种IDE是集成编辑器、编译器,调试等等所有环境一起)。想要运行代码,还需要配置编译器,C++常用的编译器为MinGW,下载后将其配置到系统环境
- 网络相关篇Linux一句话精彩问答--2006/09/08更新--20060908pdf版本下载
----------------------------网络相关篇--------------------------2001让apache的默认字符集变为中文(陈绪)vihttpd.conf,找到AddDefaultCharsetISO-8859-1一行apache版本如果是1.*,改为AddDefaultCharsetGB2312如果是2.0.1-2.0.52,改为AddDefaultChar
- Debian TTY环境乱码
两斤半
DebianLinuxdebianlinux
设置语言环境当前语言环境locale重新配置语言环境sudodpkg-reconfigurelocales配置控制台字体安装console-setup和kbd支持UTF-8的控制台字体sudoaptinstallconsole-setupkbd重新配置控制台字体sudodpkg-reconfigureconsole-setup内核相关没有正确加载字体或控制台相关的模块,安装或重装字体#文泉驿正黑s
- 数据结构:多维数组在内存中的映射(Address Mapping of Multi-dimensional Arrays)
95号闪电麦坤
数据结构数据结构
目录行主映射(Row-MajorMapping)列主映射(Column-MajorMapping)三维数组的性映射公式行主映射推导列主映射推导在内存中,数据只能线性存储(一维地址线),但二维数组是逻辑上的“表格”结构。所以,编译器必须把二维数组的元素映射到内存中的线性地址。行主映射(Row-MajorMapping)行主映射是指:当我们用一维线性内存来存储二维数组时,优先存储每一整行的所有元素,然
- 【C#】MVVM基础知识及基本应用
Mike_Wuzy
c#
以下是一些关于C#中MVVM(Model-View-ViewModel)模式的基础知识:1.模型(Model)模型负责表示数据和业务逻辑,通常包括数据库访问、文件操作等。它不包含任何用户界面相关的代码。publicclassPerson{publicintId{get;set;}publicstringName{get;set;}publicDateTimeBirthDate{get;set;}/
- React与Vue的区别?
扎西_德勒
vue.jsreact.jsjavascript
一、区别:1.语法Vue采用自己特有的模板语法;React是单向的,采用jsx语法创建react元素。2.监听数据变化的实现原理不同Vue2.0通过Object.defineproperty()方法的getter/setter属性,实现数据劫持,每次修改完数据会触发diff算法(双端对比)React默认是通过shouldComponentUpdata生命周期来决定是否需要渲染更新,再触发它的dif
- 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