- Jfinal +Swagger
zhanghe687
javajava
使用Jfinal[版本3.6]+Swagger实现前后端开发时接口文档管理步骤1:1.下载jfinal-swagger-1.0.0.jar下载地址:live.autujfinal-swagger1.0.0步骤2:2.下载swagger-ui,放入项目中,存放目录如下:下载地址:https://gitee.com/zhanghe687/jfinal_swagger_ui.git步骤3:修改jfina
- 3、微服务整合Swagger3.0 - 网关Gateway聚合接口
cch记录JAVA
系统接口文档Swaggerknife4j微服务gateway架构springbootjava后端
1、SpringBoot快速整合Swagger3.02、微服务整合Swagger3.0-抽取为公共模块3、微服务整合Swagger3.0-网关Gateway聚合接口4、微服务整合Swagger3.0-使用方法5、微服务Swagger3.0升级为Knife4j一、实现的效果访问http://{ip}:{port}/swagger-ui/index.htmlspringfox-swagger提供的分组
- Spring Boot 集成knife4j
m0_74821835
springbootjava后端
SpringBoot2集成knife4j官方文档Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目一开始项目初衷是为了写一个增强版本的swagger的前端ui,但是随着项目的发展,面对越来越多的个性化需求,不得不编写后端Java代码以满足新的需求,在swagger-bootstrap-ui的1.8.
- SpringBoot3整合Knife4j
吃海鲜的骆驼
工作流java后端
SpringBoot3整合Knife4j环境:jdk17、SpringBoot3.4.0、整合Knife4j4.5.0版本1、pom中引入knife4j的依赖com.github.xiaoyminknife4j-openapi3-jakarta-spring-boot-starter4.5.02、yml中添加配置#knife4j配置springdoc:swagger-ui:path:/swagge
- 如何在 FastAPI 中使用本地资源自定义 Swagger UI
gs80140
各种问题fastapiswagger_ui
要自定义FastAPI中的SwaggerUI,且使用本地资源来代替CDN。只是需要稍微修改一下。修改后的代码:步骤:挂载本地静态文件目录:我们将本地的SwaggerUI资源文件(如.js,.css,favicon.png等)放置在项目的一个目录中(例如:static/swagger-ui)。自定义SwaggerUI页面:您可以通过FastAPI的get_swagger_ui_html()方法来加载
- springboot整合knife4j,从此告别手写接口文档
棋了个怪啊_Rachel
Java进阶学习汇总java开发语言knife4j
关于knife4jKnife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目一开始项目初衷是为了写一个增强版本的swagger的前端ui,但是随着项目的发展,面对越来越多的个性化需求,不得不编写后端Java代码以满足新的需求,在swagger-bootstrap-ui的1.8.5~1.9.6版本之间,采用的
- 关闭spirng boot集成springdoc-openapi的接口文档
abments
springjava
springdoc-openapi依赖包org.springdocspringdoc-openapi-starter-webmvc-ui2.1.0org.springdocspringdoc-openapi-starter-webmvc-api2.1.0关闭方式#配置文件中添加如下配置springdoc:swagger-ui:enabled:false关键部分代码分析/**************
- swagger-ui
三十小库里
javaspringspringboot
目录一、swagger-ui简介1.1swagger-ui原理1.2swagger-ui特点二、swagger-ui+springboot页面使用2.1swagger-ui的依赖2.2加入以上依赖要注意的点2.3工具类3.4swagger-ui常用注解@Api(修饰类)@ApiOperation(修饰方法)@ApiParam(接收参数)@ApiModel(修饰参数对象类)@ApiModelProp
- 在vue中使用swagger-ui和swagger-editor
宸起
小tipsvueswagger2
需求:在vue中使用swagger-ui和swagger-editorSwaggerEditor是一个开源编辑器,用于设计,定义和记录Swagger规范中的RESTfulAPI。SwaggerEditor的源代码可以在GitHub中找到。swagger官方文档:https://swagger.io/docs/open-source-tools/swagger-editor/https://swag
- SpringBoot3整合Knife4J,以及被拦截无法显示doc.html问题
whohaving
Javajavaspringboot
引入坐标:com.github.xiaoyminknife4j-openapi3-jakarta-spring-boot-starter4.4.0application.yml:#springdoc-openapi项目配置springdoc:swagger-ui:path:/swagger-ui.htmltags-sorter:alphaoperations-sorter:alphaapi-doc
- springboot集成swagger knife4j使用
Dncfjy_
springbootjava后端
关于knife4jKnife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目一开始项目初衷是为了写一个增强版本的swagger的前端ui,但是随着项目的发展,面对越来越多的个性化需求,不得不编写后端Java代码以满足新的需求,在swagger-bootstrap-ui的1.8.5~1.9.6版本之间,采用的
- springboot整合knife4j
天黑请闭眼丶风
springboot框架整合javaspringboot
springboot整合knife4j简介官网地址:knife4jKnife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目。一开始项目初衷是为了写一个增强版本的swagger的前端ui,但是随着项目的发展,面对越来越多的个性化需求,不得不编写后端Java代码以满足新的需求,在swagger-bootstr
- Java21 + SpringBoot3整合springdoc-openapi,自动生成在线接口文档,支持SpringSecurity和JWT认证方式
偏安zzcoder
开发日记springbootjava后端
文章目录前言相关技术简介OpenAPISwaggerSpringfoxspringdocswagger2与swagger3常用注解对比实现步骤引入maven依赖修改配置文件设置`api-docs`和`swagger-ui`访问权限定义springdoc配置类修改Controller类和实体类查看效果总结前言近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统
- Swagger ui接口自动化批量漏洞测试
~Echo
渗透测试postmanSwaggeruiSwaggerui漏洞测试
目录Swagger介绍postman导入SwaggerApi设置Environment代理设置批量自动化测试结合xraySwagger介绍Swagger是一个用于生成、描述和调用RESTful接口的Web服务。通俗的来讲,Swagger就是将项目中所有(想要暴露的)接口展现在页面上,并且可以进行接口调用和测试的服务。在平时渗透测试的的时候,经常会发现Swaggerui(swagger-ui是将ap
- swagger-ui配置错误原因
城堡修炼者
#后端遇过的那些bugjavaswagger
第一个问题就是出现了errorwhitepage,主要是因为运行类的pom文件里没有添加到common类的地址dependency,导致出现问题,还到处排查第二个问题进去就跳出登录页面,可是我没有账户名和密码啊在弄pom文件的时候不知道什么时候添加到了spring自有的security配置,注释掉就好了第三个问题我的问题是没在启动类前加这个注释
- 项目的swagger-ui页面访问不到
心若向阳,必生温暖。
java开发语言springbootswagger
场景:springboot2.5.6项目,导入了springfox-boot-starter即swagger3.0的依赖.配置了LoginInteceptor。ERROR:原因:拦截器拦截了swagger-ui的资源请求解决办法:.excludePathPatterns添加swagger-ui的资源请求路径@OverridepublicvoidaddInterceptors(Interceptor
- 使用docker搭建Swagger
黑客不黑_
1、下载swagger-editor的容器dockerpullswaggerapi/swagger-editordockerrun-d-p81:8080swaggerapi/swagger-editorimage.png2、下载swagger-ui的容器dockerpullswaggerapi/swagger-uijson文件挂在到容器中dockerrun-d-p80:8080-eSWAGGER_
- springboot网关添加swagger
爱窦
springboot后端java
添加依赖com.spring4allswagger-spring-boot-starter2.0.2添加配置类,与服务启动类同一个层级地址:http://localhost:port/swagger-ui/index.htmlpackagecom.brt.cloudGateway;importjava.util.Optional;importorg.springframework.beans.fa
- 登录Swagger2界面却进入了Please sign in界面
Everybody_up
javaswagger2spring
启动Swagger-ui,却进入了Pleasesignin在搭建开发环境时,配置好了swagger2,在访问swagger2接口界面时并没有进入swagger-ui界面,而是进入了一个登录界面,这个界面并不是我写的。后来查询资料发现,这个界面是SpringSecurity对swagger2访问进行拦截。解决方法:如果不使用SpringSecurity,可以将pom.xml文件中的SpringSec
- Springboot集成Swagger
郝南过
Springboot多模块集成springboot后端javaswagger
一、swagger概述swagger是一套基于OpenAPI规范构建的开源工具,使用RestApi1、代码变,文档变2、跨语言,支持多种语言3、swagger-ui呈现出来的是一份可交互式的API文档,可以直接在文档页面尝试API的调用4、可以将文档规范导入相关工具(postman、soapui),这些工具将会为我们自动地创建自动化测试二、在公共模块common下配置swagger1、在commo
- swagger2 2.9.2版本 swagger-ui页面不显示 请求实体 Example Value Model 坑
oxygen gas
笔记日常代码java
在2.9.2中,当请求参数是带泛型的参数,例如List,PageCondition再访问swagger页面的时候会出现没有显示ExampleValueModel,也就是得自己手动取填写请求实体,即使注解写好了也依旧没有显示,还有注意即使把泛型括号换成«不是io.springfoxspringfox-swagger23.0.0io.springfoxspringfox-boot-starter3.0
- 记一次渗透测试信息收集之swagger-ui未授权
爱玩游戏的黑客
信息收集ui网络安全web安全
一、swagger-ui未授权目标某api子域,如:http://xxxapi.xxx.com,是springboot默认页面访问/env/actuator/env提示404/401(无权限访问)使用dirsearch进行目录扫描,扫出swagger-ui.html经测试发现所有接口皆未鉴权,可构造请求获取信息二、信息收集找到其中某个接口(遍历会员所有个人信息),构造请求访问根据页面返回得知,需要
- SpringBoot集成swagger-ui
qq_1061383457
springbootui后端
1.引入依赖:io.springfoxspringfox-swagger22.7.0io.springfoxspringfox-swagger-ui2.7.02.编写配置类--SwaggerConfig(注意修改包名):packagecom.jk.conf;importorg.springframework.context.annotation.Bean;importorg.springframe
- 自定义swagger-ui
KennethYap
swagger-ui采用Vue+element-ui构建的swagger-ui,Github地址:https://github.com/yaojunguang/swagger-ui介绍在日常开发中,接口文档维护一直是项目管理中的头疼的问题,还有就是单元测试、接口测试等。swagger是我极具推崇的开发辅助工具,很好的解决了上诉的这些问题在移动端开发过程中module生成也一直是费力而麻烦的事情(j
- Swagger报错,访问测试接口页面doc.html报错:java.lang.NumberFormatException: For input string: ““,swagger-ui插件的使用
小学鸡!
Swagger2htmljavaui
之前我们测试接口,都是使用postman工具,而Swagger2给出了测试接口的文档,使用方式如下:1、添加依赖:com.github.xiaoyminswagger-bootstrap-ui1.9.62、浏览器访问:localhost:项目启动的端口/doc.html报错:可以正常访问,但是IDEA报错:java.lang.NumberFormatException:Forinputstring
- 如何在maven项目或者gradle项目中搭建swagger-本地测试工具
XiaoPan25920
swagger2javaspringspringbootmybatis
如何在maven项目或者gradle项目中搭建swagger-本地测试工具Swagger是当前最好用的RestfulAPI文档生成的开源项目,通过swagger-spring项目,实现了与SpingMVC框架的无缝集成功能,方便生成springrestful风格的接口文档,同时swagger-ui还可以测试springrestful风格的接口功能。1.在pom.xml中引入依赖io.springf
- 解决Swagger报错java.lang.NumberFormatException: For input string: ““
weixin_48965172
java开发语言
页面请求swagger-ui页面后端控制台会打印出以下问题:java.lang.NumberFormatException:Forinputstring:""atjava.lang.NumberFormatException.forInputString(NumberFormatException.java:65)atjava.lang.Long.parseLong(Long.java:601)a
- 跟着视频学习java,发现swagger打不开?怎么解决
明天一定.
开发javaspringmvc
前因现在到处都在卷java,不会java的前端不是好前端。这不,周围有前端同学开始学java了。昨天他突然找我问说引入依赖,配置之后swagger打不开了。分析过程1、查看他的swagger版本,让他试了对应路径/swagger-ui/index.html,确定一下真的打不开2、依赖和swagger配置拿过来我的纯净项目里边,发现能跑。如下@Configuration@EnableSwagger2
- Spring Boot中使用Swagger
randy.lou
springboot后端java
1.启用Swagger1.1启用注解扫描和文档接口直接在POM文件引入依赖io.springfoxspringfox-swagger22.9.21.2启动swagger-ui目前看到的选项有2个:swaager-ui,访问地址:http://127.0.0.1:18080/swagger-ui.htmlio.springfoxspringfox-swagger-ui2.9.2swagger-boo
- [shell]服务器监控脚本
程序员三木
Java探索者之路服务器运维
#!/bin/bash#定义项目的URLURL="http://127.0.0.1:8080/swagger-ui/index.html"#发送HTTP请求检测项目是否正常运行response=$(curl-m10-s-o/dev/null-w"%{http_code}"$URL)echo$responsecurrent_dir=$(pwd)echo"$current_dir"echo"切换到工程
- 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