- [spring6: Mvc-网关]-源码解析
推荐阅读:[spring6:Mvc-函数式编程]-源码解析GatewayServerMvcAutoConfiguration@AutoConfiguration(after={HttpClientAutoConfiguration.class,RestTemplateAutoConfiguration.class,RestClientAutoConfiguration.class,FilterAu
- 接口自动化测试框架搭建
测试老哥
测试用例软件测试自动化测试python职场和发展测试工具接口测试
点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快一、原理及特点参数放在XML文件中进行管理用httpClient简单封装一个httpUtils工具类测试用例管理使用了testNg管理,使用了TestNG参数化测试,通过xml文件来执行case。测试报告这里用到第三方的包ReportNG项目组织用Maven二、准备使用工具:eclipse,maven用到的第三方jar包:dom4j、re
- OKHttp3
远方很美i
1.OkHttp3简介1.支持http和https协议,api相同,易用;2.http使用线程池,https使用多路复用;3.okhttp支持同步和异步调用;4.支持普通form和文件上传form;5.操作请求和响应(日志,请求头,body等);6.okhttp可以设置缓存;7.支持透明的gzip压缩响应体2.OkHttp3使用思路get请求思路1.获取okHttpClient对象2.构建Requ
- 41.FeignClient整合Sentinel
卷土重来…
微服务sentineljava微服务
1.开启feign的sentinel功能feign:client:config:default:#default表示全局配置,不仅仅针对某个微服务loggerLevel:FULL#记录Basic、Headers的内容、请求体和响应体的信息#feign的底层客户端实现由默认URLConnection(不支持连接池)变成HttpClient(支持连接池),提高性能httpclient:enabled:
- java httpclient使用socks5代理(一)创建socks5代理服务
weixin_33984032
java
2019独角兽企业重金招聘Python工程师标准>>>最近遇到使用httpclient用socks5代理的需求,一头雾水,度娘谷歌一对方法后得出以下方法实现需要;下面是第一篇部分:创建socks代理服务,这部分代码是网上转载所得,记录一下packagecom.test;importjava.io.ByteArrayOutputStream;importjava.io.Closeable;impor
- Java 原生 HTTP Client
en-route
微服务之间如何调用javahttp开发语言
介绍Java原生HttpClient是从Java11开始引入的标准库,用于简化HTTP请求的发送与响应处理。它支持同步和异步请求,并内置对HTTP/1.1和HTTP/2协议的支持。HttpClient提供了易用的API来设置请求头、请求体、处理响应以及配置SSL/TLS加密等安全功能。一个简单的例子发送GET请求并将打印ResponseHttpClientclient=HttpClient.new
- OKHttp3源码分析——学习笔记
Sincerity_
源码相关Okhttp源码解析读书笔记httpclientcache
文章目录1.HttpClient与HttpUrlConnection的区别2.OKHttp源码分析使用步骤:dispatcher任务调度器,(后面有详细说明)Request请求RealCallAsyncCall3.OKHttp架构分析1.异步请求线程池,Dispather2.连接池清理线程池-ConnectionPool3.缓存整理线程池DisLruCache4.Http2异步事务线程池,http
- OkHttp3源码解析--设计模式,android开发实习面试题
this.cache=builder.cache;}//构造者publicstaticfinalclassBuilder{Cachecache;…//构造cache属性值publicBuildercache(@NullableCachecache){this.cache=cache;returnthis;}//在build方法中真正创建OkHttpClient对象,并传入前面构造的属性值publi
- OkHttp3源码解析--设计模式
2401_84413396
程序员设计模式
}//在创建OkHttpClient的时候OkHttpClientclient=newOkHttpClient.Builder().cache(/创建cache对象/).build();工厂模式====直接看代码:publicinterfaceCallextendsCloneable{Requestrequest();Responseexecute()throwsIOException;voide
- Android OkHttp使用与底层机制详解
你过来啊你
androidokhttp
OkHttp是Square公司开发的一个高效、功能强大的HTTP客户端库,因其简洁的API、灵活的拦截器链、内置连接池、透明GZIP压缩、响应缓存以及对HTTP/2和WebSocket的支持,已成为Android和Java应用开发中事实上的标准网络库。一、OkHttp的核心使用1.基本请求流程//1.创建OkHttpClient实例(通常全局共享一个实例)OkHttpClientclient=ne
- 在IDEA中无缝接入DeepSeek:智能编程助手指南
摆烂大大王
deepseekintellij-ideajavaidedeepseekAIGC
一、为什么要在IDEA中使用DeepSeek?DeepSeek作为先进的AI编程助手,能提供:智能代码补全与建议实时错误检测与修复方案代码解释与文档生成复杂算法实现建议多语言支持(Python/Java/JS等)二、接入前准备获取API密钥访问DeepSeek官网注册账号在控制台创建APIKey并保存IDEA环境要求IntelliJIDEA2020.3+安装HTTPClient插件(已内置)三、两
- 第二十八:Fiddler抓包-抓取Android7.0以上的Https包(三)-夜神模拟器+Xposed+JustTrustMe
卢卡平头哥
Fiddlerfiddlerhttpsandroid
一.简介1.二次加密:有的APP,在涉及到关键数据通信时,会将正文二次加密后才通过HTTPS发送1.1.抓包抓到的是一堆二进制base642.自带HTTPClient:像支付宝那样的变态,自己带一个基于so的HTTPClient库2.1.对于关键数据,都不走URLConnection和OkHttp,而是走自己的HTTPClient库2.2.甚至一些
- 构建未来交互体验:AG-UI 如何赋能智能体与前端通信?
ChaITSimpleLove
AG-UIAIAgent智能体与用户交互协议智能体与用户交互标准化CopilotKit开放的轻量的基于事件的协议
目录什么是AG-UI?⚙️AG-UI主要解决什么问题?AG-UI介绍️核心组件1.协议层(ProtocolLayer)2.标准HTTP客户端(StandardHTTPClient)3.消息类型(MessageType)4.运行Agent(RunningAgent)5.状态管理(StateManagement)️6.工具和交接(ToolsandHandoff)事件(Events)MCPvsA2Avs
- [netty5: HttpServerCodec & HttpClientCodec]-源码分析
idolyXyz
netty5-源码阅读netty
在阅读该篇文章之前,推荐先阅读以下内容:[netty5:ChannelHandler&ChannelHandlerAdapter]-源码解析[netty5:HttpObjectEncoder&HttpObjectDecoder]-源码解析HttpServerCodecHttpServerCodec是一个Netty编解码器,结合HttpRequestDecoder和HttpResponseEncod
- AndroidStudio用华为手机调试出现联网即闪退问题的解决办法
鹿小黑
Androidandroid
第一步:调试一开始出现的错误:java.lang.NoClassDefFoundError:Failedresolutionof:Lorg/apache/http/impl/client/DefaultHttpClient解决方法:在manifest.xml文件中的application节点下添加第二步:执行上述步骤后调试出现的错误:java.io.IOException:Cleartexttra
- java中http调用接口 传参为form-data
洋:Y
springbootjavahttpservlet
直接上代码@OverridepublicJSONObjectgetCameraList(intcurrent,intsize,Stringcode,Stringname)throwsIOException{DefaultHttpClientclient=newDefaultHttpClient();MultipartEntityBuilderbuilder=MultipartEntityBuild
- 在C#中根据URL下载文件并保存到本地,可以使用以下方法(推荐使用现代异步方式)
方法1:使用HttpClient(异步,推荐)csharpusingSystem;usingSystem.IO;usingSystem.Net.Http;usingSystem.Threading.Tasks;classFileDownloader{publicstaticasyncTaskDownloadFileAsync(stringurl,stringlocalFilePath){using
- 学习记录:DAY35
2301_79760424
每日学习记录学习
前言自从得了精神病,整个人精神多了!日程今天也早起了,美中不足的是昨天没怎么睡。本来很气很暴躁的,学了一会释怀了,反正这种状态也不是不能学,多来几天就习惯了。--------7.2--------偷懒了,这两天几乎就没干什么事情学习内容省流:redis入门HttpClient微信小程序缓存机制1.redis入门基于内存储存的数据库redis.net.cn0)安装window版本:Releases·
- springboot+微信小程序接入微信小程序支付(使用证书与JSAPI)
小杨HPDay!
springboot微信小程序后端
1、maven引入依赖com.github.wechatpay-apiv3wechatpay-apache-httpclient0.4.52、配置文件application.yml#微信支付相关参数wx-pay:#商户id(微信支付商户平台获取)mch-id:xxxxxxxxx#公众号appid(和商户id绑定过后,微信支付商户平台或者微信公众平台获取)appid:xxxxxxxxx#商户证书序列
- 推荐项目:Rust编写的终端HTTP客户端——CuTE
邵冠敬Robin
推荐项目:Rust编写的终端HTTP客户端——CuTECuTEHTTPclient/libcurlTUIfrontendinRust,withrequest+keystorage项目地址:https://gitcode.com/gh_mirrors/cute1/CuTE在繁忙的开发和系统管理世界里,有时候我们需要的是一个既简单又强大的工具来处理日常的HTTP请求。CuTE(RustTUIHTTPC
- httpclient4.5 访问 使用自签名证书的https网站 报错问题的解决
cszsc
httpclienthttps自签名证书
使用下面的getHttpClient()方法代替HttpClients.createDefault()即可。(可以不是static)privatestaticCloseableHttpClientgetHttpClient(){try{SSLContextsslContext=SSLContexts.custom().loadTrustMaterial(TrustSelfSignedStrateg
- spark写入hive表问题
qq_42265026
sparkhive大数据
1、httpclient发送post请求,当返回的数据过大时,报错socketclosed这个原因是客户端主动将连接关闭,根本原因是将httpclient。execute的返回结果closeableResponse作为a方法的返回结果,在b方法中进行解析虽然在b方法中没有关闭closeableResponse,但是在a方法中返回closeableResponse后,会进行httppost.real
- 浅谈HttpClient
weixin_34092455
网络
为什么80%的码农都做不了架构师?>>>HttpClient简介HttpClient是ApacheJakartaCommon下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient支持的功能如下:支持Http0.9、Http1.0和Http1.1协议。实现了Http全部的方法(GET,POST,PUT,HEA
- Java对接Dify API接口完整指南
小侠C
deepseekAIDifyJava
Java对接DifyAPI接口完整指南一、DifyAPI简介Dify是一款AI应用开发平台,提供多种自然语言处理能力。通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中。二、准备工作获取API密钥登录Dify平台控制台在「API密钥」模块创建新的密钥添加依赖org.apache.httpcomponentshttpclient4.5.13com.faste
- C#中使用HttpClient类在进行网络请求
神之王楠
c#网络httpclient
在C#中,使用HttpClient类进行网络请求和数据交换是一个常见的做法。HttpClient是.NET框架提供的一个轻量级、高性能的HTTP通信基础设施。下面是一个使用HttpClient进行网络请求和数据交换的基本示例:首先,你需要创建一个HttpClient的实例(注意,HttpClient实例应该被重用而不是为每个请求都创建一个新的实例,因为它内部使用了连接池来优化性能):usingSy
- HttpClient简单理解和使用
令人头秃的bug
javajsonapache后端
HttpClient简单理解和使用HttpClient的简介使用场景依赖代码本人所写不一定是完全正确完善的,欢迎大家指导HttpClient的简介当有连接第一次使用的时候建立连接结束连接不关闭,归还到池中下次同个目的连接可以从池中直接获取定时清理过期连接定义需要的属性与http协议对接使用场景一是爬虫,但是我们不是面向监狱编程,我们是面向对象,所以大多是时候我们选择的是第二种,通过构建HttpCl
- C#.NET HttpClient 使用教程
c#.net
简介HttpClient是.NET中用于发送HTTP请求和接收HTTP响应的现代化API,它取代了过时的WebClient和HttpWebRequest类。HttpClient是.NETFramework4.5+和.NETCore/.NET5+中提供的、基于消息处理管道(messagehandlerpipeline)的现代HTTP客户端库。相比早期的HttpWebRequest,它更易用、支持异步
- Minio使用https自签证书
若疆赤云online
httpsjava网络协议
自签证书参考:window和ubuntu自签证书_windows自签证书-CSDN博客//certFilePath:直接放在resources目录下或者可以自定实现读取逻辑//读取的是.crt证书文件publicstaticOkHttpClientcreateTrustingOkHttpClient(StringcertFilePath)throwsException{//1.加载证书Certif
- Springboot RestTemplate 实现连接池代码实现
&loopy&
springboot后端java
在SpringFramework中,RestTemplate本身并不直接支持连接池(connectionpooling)功能,因为它基于底层的HTTP客户端库(如JDK的HttpURLConnection、ApacheHttpClient、OkHttp等)来发送HTTP请求。如果你需要连接池功能,你可以通过配置使用支持连接池的HTTP客户端库,比如ApacheHttpClient或OkHttp,来
- SpringBoot使用RestTemplate实现发送HTTP请求
pan_junbiao
SpringBootJava我の原创springboothttp后端
Java实现发送HTTP请求,系列文章:《Java使用原生HttpURLConnection实现发送HTTP请求》《Java使用HttpClient5实现发送HTTP请求》《SpringBoot使用RestTemplate实现发送HTTP请求》1、RestTemplate的介绍RestTemplate是Spring框架提供的一个用于访问RESTful服务的客户端工具,它简化了与RESTful服务的
- 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