简介 什么是可扩展的应用程序呢?可扩展的意思是不需要修改原始代码,就可以扩展应用程序的功能。我们将应用程序做成插件或者模块。 这样可以在不修改原应用的基础上,对系统功能进行升级或者定制化。...本文将会向大家介绍如何通过java中的SPI机制实现这种可扩展的应用程序。 SPI简介 SPI的全称是Java Service Provider Interface。...是java提供的一种服务发现的机制。 通过遵循相应的规则编写应用程序之后,就可以使用ServiceLoader来加载相应的服务了。...META-INF/services文件夹,并且在里面创建两个以 Service Provider Interface限定名为名字的文件,这里文件名是:com.flydean.base.service.ModuleService...为了更好的展示扩展应用的实际使用,我们分别创建4个模块。在实际应用中,只需要将这些jar包加入应用程序的classpath即可。
原标题:Spring认证中国教育管理中心-了解如何使用 Spring 和 RabbitMQ 创建一个简单的发布和订阅应用程序。...您可以手动下载它,或者,如果您使用带有 Homebrew 的 Mac,则可以在终端窗口中运行以下命令: brew install rabbitmq 通过在终端窗口中运行以下命令,解压缩服务器并使用默认设置启动它...你也可以从 Github 上 fork 项目并在你的 IDE 或其他编辑器中打开它。 创建 RabbitMQ 消息接收器 对于任何基于消息传递的应用程序,您都需要创建一个响应已发布消息的接收器。...以下清单(来自 src/main/java/com.example.messagingrabbitmq/MessagingRabbitApplication.java)显示了如何创建应用程序类: package...在测试中,您可以模拟运行器,以便可以单独测试接收器。 运行应用程序 该main()方法通过创建 Spring 应用程序上下文来启动该过程。这将启动消息侦听器容器,该容器开始侦听消息。
在 SQL 中,可以使用子查询来获取满足特定条件的数据。子查询是嵌套在主查询中的查询语句,它返回一个结果集,可以用来过滤主查询的结果。...下面是使用子查询来获取满足特定条件的数据的一般步骤: 在主查询中使用子查询,将子查询的结果作为条件。 子查询可以在主查询中的 WHERE 子句、FROM 子句或 HAVING 子句中使用。...子查询可以返回单个值或多个值,具体取决于使用的运算符和子查询的语法。 以下是一些示例: 使用子查询在 WHERE 子句中过滤数据: SELECT column1, column2, ......FROM table WHERE column IN (SELECT column FROM table WHERE condition); 使用子查询在 FROM 子句中创建临时表: SELECT column1...FROM table GROUP BY column1 HAVING column1 > (SELECT AVG(column1) FROM table); 请注意,子查询的性能可能会较低,因此在设计查询时应谨慎使用
Fayson在前面的文章《Cloudera Labs中的Phoenix》和《如何在CDH中使用Phoenix》中介绍了Cloudera Labs中的Phoenix,以及如何在CDH5.11.2中安装和使用...本文Fayson主要介绍如何在CDH中使用Phoenix在HBase上建立二级索引。...《如何在CDH中使用Phoenix》。...3.Covered Indexes(覆盖索引) ---- 1.使用覆盖索引获取数据的过程中,内部不需要再去HBase的原表获取数据,查询需要返回的列都会被存储在索引中。...和全局索引一样,Phoenix也会在查询的时候自动选择是否使用本地索引。本地索引之所以是本地,只要是因为索引数据和真实数据存储在同一台机器上,这样做主要是为了避免网络数据传输的开销。
首先给一个常规的动态创建控件,并进行验证的代码 [前端aspx代码] <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs...Cell = new TableCell(); Cell.Controls.Add(_TxtBox); Cell.Controls.Add(_Require);//将刚才创建的二个控件...runat="server" Text="验证动态控件" Enabled="true" /> 再次运行,发现没办法再对动态生成的控件进行验证了...(也就是说,新创建的验证控件没起作用) ,怎么办呢?...经过一番尝试,发现了一个很有趣的解决办法,具体参看以下代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs"
FileProvider 的ContentProvider, 子元素指向一个 XML 文件,用于指定要共享的目录。...,在res下新建一个xml文件夹,最后在xmll文件夹中新建file_paths.xml文件。...path 属性用于指定apk所在的文件夹名,与步骤4中设置的对应,不要弄错了。 name 属性告诉 FileProvider 为共享路径创建一个别名为 apk 的路径字段,可任意。...,这里下载在了外部存储的私有缓存文件夹下, // 你可以选择其他存储地址如:外置SD卡等,但是要注意与file_paths.xml中,......里的 //path="myApkFile/" 属性共享的文件夹目录对应一致 File file= new File(context.getExternalCacheDir
六、删除Github中已有的仓库中的某个文件或文件夹(即删除远程仓库中的某个文件或文件夹) 我们知道,在Github上我们只能删除仓库,并不能删除文件或者文件夹,所以只能用命令来解决。...6.2、只删除远程仓库的文件或文件夹,不删除本地仓库的文件或文件夹 假如我们想要在远程仓库中将文件夹test01删除掉,但在本地仓库中并不想把它删除: ? 在命令窗口输入以下命令: ?...七、如何使用git将本地仓库连接到多个远程仓库 1、先在GiuHub(国外)、Gitee码云(国内) 和 Coding(国内) 上分别新建一个远程仓库,参考“二、创建远程仓库”。...2、创建一个本地仓库test,在某一个目录下右键 --> Git Bash Here,演示使用本地仓库test(远程仓库的名称和本地仓库的名称可以不一样,一样是为了方便,不一样也没事) ?...其余命令如下: 使用git在本地创建一个本地仓库的过程(位置:在本地桌面上) $ makdir test // 创建一个本地仓库 $ cd test /
基本操作 使用外部存储,需要的权限,在 AndoridManifest.xml 中: 的特性 下面介绍这些路径的特性以及使用中需要注意的细节: 根目录( $rootDir ): 内部存储路径: /data , 通过 Environment.getDataDirectory...,在app卸载之后,会被系统删除,我们应将应用的数据放于这两个目录中。...这些目录将不会随着应用的删除而被系统删除,请斟酌使用: Environment.getExternalStorageDirectory(): /storage/sdcard0 // 同 $...* 在外部存储中,这两个文件夹其他应用程序也可访问。 * 在外部存储中, $filesDir 中的媒体文件,不会被当做媒体扫描出来,加到媒体库中。 4.
检查介质可用性 在使用外部存储执行任何工作之前,应始终调用 getExternalStorageState() 以检查介质是否可用。介质可能已装载到计算机,处于缺失、只读或其他某种状态。...2.外部存储 2.1 私有存储 Context.getExternalCacheDir() Context.getExternalFilesDir() 创建的私有文件的地址是/sdcard/Android...如果我们想缓存图片等比较耗空间的文件,推荐放在getExternalCacheDir()所在的文件下面,这个文件和getCacheDir()很像,都可以放缓存文件,在APP被卸载的时候,都会被系统删除,...getDir() 在您的内部存储空间内创建(或打开现有的)目录。 deleteFile() 删除保存在内部存储的文件。 fileList() 返回您的应用当前保存的一系列文件。...为了在清除缓存的时候能够正常清除与应用相关的缓存,请将缓存文件存放在getCacheDir()或者 getExternalCacheDir()路径下。
1.定义 内部存储:内部存储位于Android手机系统的data/data/这个目录下,内部存储是私有的,主要用于存储系统和应用程序的某些数据,对于其他应用程序来说是不可见的,并且会随着应用程序的卸载而被删除...外部私有存储位于/storage/emulated/0/Android/data/包名这个目录下,它和内部存储一样是私有的,并且其他应用程序是无法访问的,会随着应用程序的卸载而被清除。 ...它对所有的应用程序都是可见的,前提是该应用程序有外部存储权限,而且外部公有存储中的数据不会随应用程序的卸载而被删除。 2.使用哪些api进行访问? ...Environment.getExternalStorageDirectory() Environment.getExternalStoragePublicDirectory(String type) 参数type用于指定文件夹的类型...注:在Android10之后,不能再使用外部公有存储下的两个方法了,应用程序只能访问自己的外部私有目录,所以Android10之后尽量使用外部私有存储下的两个方法。
),但目前公有的mode都已经废弃,意味着这个api创建的文件夹已经完全私有,不能再共享出去了。...如无特别需要,个人的做法是传入Environment的DIRECTORY常量进行文件夹创建。...说明: 使用频率极高的api,返回在根目录下的名为type的文件夹,我把它分为两种用法:一种是传入Environment的DIRECTORY常量再创建子目录使用;一种是传入appPackageName或者易被识别归属的名称创建子目录使用...Environment.DIRECTORY_PICTURES用于存放各种“正式的”图片,强烈建议在这里创建文件夹存放你想要被用户发现的图片,并且微信会扫描这个文件夹,让你的图片更容易分享。...为了在清除缓存的时候能够正常清除与应用相关的缓存,请将缓存文件存放在getCacheDir()或者 getExternalCacheDir()路径下。
本文的讨论是基于手机在没有root情形。 早期版本的Android是没有提供截屏功能的,到4.0时代后才自带了音量Down+电源键截屏的功能。...在开发过程中还可以使用adb命令对手机进行截屏 adb shell screencap -p /sdcard/screenshot.pngadb pull /sdcard/screenshot.pngadb...shell rm /sdcard/screenshot.png 一般而言,如果需要App集成截图功能,那么在Android中把一个View用图片获取后保存下来可以使用以下方法 public static...要实现此功能,就需要使用View类的draw方法,把WebView中的元素绘制到Canvas中,再从Canvas中得到Bitmap对象。...而要创建Bitmap就必须得知道宽高,那么WebView的高度应该如何获取呢?
DiskLruCache: 在Android中用到的磁盘缓存大多都是基于DiskLruCache实现的,详细怎么使用呢?...第一个參数是数据的缓存文件地址,第二个參数是当前应用程序的版本,第三个參数是同一个key能够相应多少个缓存文件。一般都是传1,第四个參数是最多能够缓存多少字节的数据,10M?...首选sdcard,假设sdcard没有挂载或者没有sdcard则获取应用默认的cache文件夹 public static File getDiskCacheDir(Context context, String...getAppVersion(context), 1, 10 * 1024 * 1024); } catch (IOException e) { e.printStackTrace(); } 详细怎么使用上面创建的磁盘缓存例如以下...在实际操作中内存缓存和磁盘缓存是配合起来使用的。一般先从内存缓存中读取数据,假设没有再从磁盘缓存中读取。
android:authority 属性指定要用于 FileProvider 生成的 content URI 的 URI 权限,这里推荐使用 包名.fileprovider... 的 子元素指向一个 XML 文件,用于指定要共享的目录。 在 res/xml 目录下创建文件 file_paths.xml 内容如下: 表示应用程序内部存储目录下的...name 属性告诉 FileProvider 为 Android/data/com.xxx.xxx/cache/app/ 创建一个名为 apk 的路径字段。...结语 除了上面这个问题,在 API Level 24(Android 7.0)之前开发的分享图文、浏览编辑本地图片、共享互传文件等功能如果没有使用 FileProvider 来生成 URI 的话,在 Android
内部存储路径/data/data/youPackageName/,在程序安装的时候创建,在卸载的时候被删除。...Context.openFileInput()与Context.openFileOutput(),只能读取和写入files下的文件,返回的是FileInputStream和FileOutputStream...Context.deleteFile(String),删除files下指定名称的文件。...3. custom dir getDir(String name, int mode), 返回/data/data/youPackageName/下的指定名称的文件夹File对象,如果该文件夹不存在则用指定名称创建一个新的文件夹...Environment.getRootDirectory() = /system context.getCacheDir() = /data/data/com.mt.mtpp/cache context.getExternalCacheDir
它继续重复语句序列,直到logic_expression 的计算结果为 False。 创建应用程序包 本节概述了包名称并讨论了如何创建应用程序包定义。...了解包名 您可以在同一应用程序包定义中创建与另一个包或子包同名的子包,只要每个子包的完全限定名称是唯一的。每个子包通过类的完整路径名(来自包定义名称和子包名称)来区分。...您可以在同一个应用程序包定义中创建具有相同名称的类,就像子包一样,只要完全限定名称是唯一的。每个类都通过类的完整路径名来区分。 **注意:**您不能创建在主包下定义了两个以上子包级别的结构。.../pbcmn/images/down_thin.svg)]创建应用程序包定义 本节讨论如何创建新的应用程序包或将新的包或类插入到应用程序包中。...应用程序包名称和应用程序类名称必须以字母字符开头,并且只能由字母数字字符和下划线 ( _ ) 组成。 **注意:**在某些情况下,如果您使用另存为创建新的应用程序包,您可能会遇到错误。
使用Exists子查询在SQL中筛选学生数据 一、引言 数据库查询是数据库管理中的核心操作,掌握高级查询技巧对数据库开发者至关重要。...那么,如何使用Exists子查询在SQL中找出学过程军老师课程的学生,以及未学过该老师课程的学生?...本文三桥君将通过具体实例,展示如何使用Exists子查询在SQL中找出学过程军老师课程的学生,以及未学过该老师课程的学生,并深入解析数据库查询的高级用法。 二、方法 1....如何明确Not Exists子查询的使用方法? 解决方案:通过具体示例详细解释如何通过Not Exists子查询筛选未学过程军老师课程的学生。 3. 如何理解子查询的正确使用?...通过以上内容,我们详细介绍了如何使用Exists子查询在SQL中筛选学生数据。三桥君希望这些知识能够帮助你在数据库开发中更加高效地完成任务。
本文就是讲解在OKHTTP中如何配置缓存。 HTTP协议中缓存相关 为了更好的讲解OKHTTP怎么设置缓存,我们追根溯源先从浏览器的缓存说起,这样后面的OKHTTP缓存内容自然更加好理解。...OKHTTP之Cache OKHTTP如果要设置缓存,首要的条件就是设置一个缓存文件夹,在Android中为了安全起见,一般设置为私密数据空间。通过getExternalCacheDir()获取。...如下面代码所示: //缓存文件夹 File cacheFile = new File(getExternalCacheDir().toString(),"cache"); //缓存大小为10M int...示例代码如下: private void testCache(){ //缓存文件夹 File cacheFile = new File(getExternalCacheDir...private void testCacheControl(){ //缓存文件夹 File cacheFile = new File(getExternalCacheDir
如无特别需要,个人的做法是传入Environment的DIRECTORY常量进行文件夹创建。...但目前较少开发者在使用这个api。 3.4 公有目录 获取公有目录要使用Environment的Api,它返回的目录全都是共享的公有目录。造成Android手机文件存储混乱的罪魁祸首!...getExternalStoragePublicDirectory(String type) 使用频率极高的api,返回在根目录下的名为type的文件夹,我把它分为两种用法:一种是传入Environment...的DIRECTORY常量再创建子目录使用;一种是传入appPackageName或者易被识别归属的名称创建子目录使用。...值得一提的是淘宝有在使用这个文件夹,用于保存它的商品分享截图,这个位置的确可以避免被微信封杀~哈哈 Environment.DIRECTORY_PICTURES用于存放各种“正式的”图片,强烈建议在这里创建文件夹存放你想要被用户发现的图片
` } 然后,我们要为子级路由创建并设置需要显示的子级组件 //建议创建的组件首字母大写,和其他内容区分 const Users = {template:` 用户管理...index.js文件 在项目目录中创建index.js文件作为入口文件 在index.js中输入需要执行的js代码,例如: console.log("ok"); D.使用npx执行文件 打开终端...,输入命令: npm init -y ####B.创建首页及js文件 在项目目录中创建index.html页面,并初始化页面结构:在页面中摆放一个ul,ul里面放置几个li 在项目目录中创建js文件夹...:In dedicated config files(单独使用文件进行配置) 是否保存为模板:n 使用哪个工具安装包:npm 2).基于ui界面创建Vue项目 命令:vue ui 在自动打开的创建项目网页中配置项目信息...)] 然后需要添加公共样式,在assets文件夹下面添加css文件夹,创建global.css文件,添加全局样式 /* 全局样式表 */ html,body,#app{ width: 100%;