整理了三方框架,给大家分享。
github地址
系统控件
-
TextView
- 一个功能强大的TextView,可以满足日常大部分布局方式
- Facebook 开源文本布局库
- 一个对齐TextView文本的库
- 自适应大小和行的TextView
- Android修改6.0系统文本选择菜单
- 歌词显示控件,支持多行显示、拖曳播放、自动识别歌词文件的编码
- 非常实用的省略控件,无emoji截断之乱码, 无characterstyle截断之不雅
- 歌词风格的 TextView,利用 Gradient 渐变实现
- 通过RelativeLayout组装的各种效果的TextView
-
TextView富文本
- Android平台下的富文本显示控件
- 显示富文本的TextView
- 花式封装与使用SpannableString
- 简单易用的TextView装饰库
-
TextView特效
- 带滚动数字的TextView
- 垂直跑马灯/垂直翻页公告
- 一个滑动动画的textview(更好的显示温度,金额等)
- 数字增加动画的 TextView
- Android Textview Fading 动画效果
- 一个用粒子动画显示文字的 Android 自定义 View
-
ImageView
- 基于Glide V4.0封装的图片加载库,可以监听加载图片时的进度
- Android 加载大图可以高清显示10000*10000像素的图片,轻松实现微博长图功能
- 大图查看加载库,支持拖动和缩放,利用 fresco 加载,超级方便,但是内存占用超级低,一点也不卡
- 一个扩展原生控件支持圆角矩形框背景的库,可以减少相关shape资源文件使用
- 又一个Android端动态验证码实现
- 图片圆角控件RoundedImageView
-
ImageView特殊样式
- 多种样式的图片,可以用于设置图片的形状,现有圆角、圆形、扇形、环形,四种可选方式
- Android 色彩渐进 ImageView
- 懂得智能配色的ImageView,还能给自己设置多彩的阴影哦
- 用 ImageView 实现圆形头像
- 根据图片阴影变颜色,细腻的视觉效果
- 目前来看,Android 上最好看的控件阴影实现
-
ImageView浏览
- 图片显示过渡动画效果
- transferee 可以帮助你完成从缩略图到原图的无缝过渡转变,功能体系仿照并涵盖 ios 版本的 QQ、微信朋友圈、新浪微博的图片浏览功能
- 类似微博微信显示图片的九宫格控件
- 仿Nice首页图片列表9图样式,并实现拖拽效果
- 类似 Instagram Story 的插件,展示照片集合
-
EditText
- 在EditText中显示tag的view
- 支持自动格式化的 EditText,比如货币、电话号码等等
- 支持 at 别人效果的 EditText,很实用的样子
- 自定义 自动补充 email 的 EditText
- 给用户输入自动加上特定格式
- Android 仿业问 打字机效果
- 支持格式自动识别和展示的 EditBox
- Box 效果的 EditText,很漂亮哦
-
Button
- Android 按钮进度条效果
- loading button
- 带有进度动画的Android自定义提交按钮
-
Switch
- Android 两状态 或者 三状态 Switch 按钮,三状态切换超实用
- 自定义动画checkbox
- Android 状态切换按钮效果
-
ProgressBar
- 渐变的圆形进度条与轻量横向进度条
- 可定制的圆形进度条,通过xml参数配置可实现QQ健康中步数的弧形进度显示、仪盘表显示速度、最常见的下载进度条等功能
- 安卓版圆形进度条
- 类似汽车仪表盘的速度指示器
- 仿新浪体育客户端比分的进度条,左右各一条
- Android自定义多种风格进度控件
- 自定义View之渐变圆环进度条
- 仿淘宝 淘抢购进度条
-
SeekBar
- 一款漂亮美观的支持双向范围选择和普通SeekBar模式的SeekBar,支持刻度、负数以及多种强大的自定义属性
- 自定义SeekBar,进度变化由可视化气泡样式呈现,定制化程度较高
-
Ratingbar
- 一款漂亮的打分效果
- 比官方组件更细腻的打分效果
- 漂亮的笑脸评分动画
-
ListView
- 一个下拉顶部图片放大的listview
- 功能强大的StickyHeaderListView:标题渐变、吸附悬停、筛选分类、动态头部等
-
ViewPager
- 无限循环滚动卡片式ViewPager,可上下左右切换,效果很赞
- 画廊展示效果,点击可以查看简介,可进入详情页面
- 敲酷炫的ViewPager卡片展示及缩放切换效果和Q弹指示器
- 阿里开源一个封装多种特性的ViewPager
- Ramotion 出品:卡片切换及Android 页面展开效果
- 带Header的ViewPager
-
Calendar
- 一款精致漂亮的日历组件
- MD 风格的日历组件
-
PickView
- 安卓选择器类,包括各种类型的选择器,可自定义顶部及底部界面,可自定义窗口动画
- Material风格时间日历选择组件
- citypicker 高仿iOS 滚轮实现 省市区 城市选择三级联动
-
Menu
- BoomMenu可以让你的菜单按钮 ... 瞬间爆炸!
- 可定制下拉选择列表
- 一个别致的环形菜单
- PopsTabView是个filter容器,他可以自动,快速,构建不同筛选样式,*组合成一组tab
-
Dialog
- 支持上中下显示ListView,GridView显示Diaolog
- 变化过度效果的 Dialog Box,动画效果很棒
-
SeachView/Spinner
- 一款可定制的搜索对话框
- 一个炫酷的SearchView搜索动画库
- 一款实现的很漂亮的卡片式搜索效果
- 很 Material Design 风格的 Search Bar,可以拿来直接用,文档也很完备。
- 一个带有展开和折叠动画的Spinner
-
Activity/Fragment
- 以卡片视图的形式管理你的 Activity,让你的 app 可以*的切换、跳转、关闭 Activity 以及结束 app 程序
- 类Android 5.0任务管理的控件
- Android 逆向实用小插件:展示页面 Top Activity 的名称和包名
- Android Activity 下拉上拉滑动消失效果,类似 Chrome 的 Tab 效果
- Activity + 多Fragment","多模块Activity多Fragment"架构而生,帮你大大简化使用过程,轻松解决各种复杂嵌套等问题,修复了官方Fragment库中存在的一些BUG
- 轮盘样式的 Fragment 选择菜单,可转动轮盘切换 Fragment
Material Design控件
-
RecyclerView
- 最强RecyclerView,Item侧滑菜单,长按拖拽Item,滑动删除Item。可以和任何下拉刷新框架结合使用
- Android RecyclerView 顶部悬浮实现
- RecyclerView:利用打造悬浮效果
- 一个如你熟悉ListView、GridView一样熟悉的RecyclerView
- Airbnb开源的一个显示recycleview复杂效果的库
- 基于 RecyclerView 实现的横向滑动组件,超级漂亮和实用
- RecyclerView横向卡片浏览
- android版高仿喵街主页滑动item视差效果
- 带下拉刷新和上拉加载的
- 边缘滑动阻尼效果
- RecyclerView实现无限轮播效果
- Android之自定义View:侧滑删除
-
LayoutManageer
- 一种流式布局的效果,很像我们平时看到的标签云
- 蜂巢布局管理器,除了外观帅气外,其增删查改的动画效果也是很赞的
- 阿里开源的针对RecyclerView的LayoutManager扩展
- Google开源的布局,其效果是实现类似CSS中的Flexbox布局效果
- 一个自适应图片长宽比Recyclerview的LayoutManager
- 支持不同形态的 Span Grid Layout
- RecyclerView 半圆形布局
-
RecyclerViewDecoration
- RecyclerView粘性标签库
- 一个提供吸顶效果的ItemDecoration
- 安卓版本的VegaScroll
- 利用RecyclerView.ItemDecoration实现顶部悬浮效果
-
RecyclerViewIteamTouch
- 带点击和滑动删除的recyclerview
- 基于itemtouchhelper,实现左滑菜单,删除确认
- 分组+展开+侧滑的Recyclerview
- 通讯录、城市悬停分组索引列表
-
RecyclerViewAnimation
- 各种Recyclerview动画效果
- 实现 RecyclerView 布局切换动画的示例
-
Adapter
- FastAdapter
- BaseRecyclerViewAdapterHelper
- 一个多功能的 Adapter
- RecyclerView 超强助手
- 多布局适配器
- kotlin根据返回的数据驱动视图
-
StatusBar
- android 4.4以上沉浸式状态栏和沉浸式导航栏管理以及对bar的其他设置
- 沉浸式状态栏工具类
-
CoordinatorLayout/AppBarLayout/CollapsingToolbarLayout
- TabLayout 和 CoordinatorLayout 相结合的折叠控件
- 使AppBarLayout 可以弹性下拉的Behavior
- 过渡平滑的 Toolbar 效果
-
DrawerLayout/NavigationView
- Material风格侧滑菜单
- 基于 Floating Button 实现的菜单展开效果,做的非常棒
- 侧滑菜单,可自定义左中右
- 一个 DrawerLayout 的扩展,具有帅气的动画与创新的交互。一次手势完成滑出侧边栏与选择菜单
- 很有特点的一个DrawerLayout,动画效果很 Android
- 漂亮的 Android Drawer
-
BottomNavigation/TabLayout
- TabLayout,对PagerSlidingTabStrip进行修改
- 扩展 Android Tab Layout,实现动画指示器效果,很漂亮
- PagerBottomTabStrip 是一个基本按谷歌Material Design规范完成的安卓底部导航栏控件
- 各式动画底部导航栏
- 仿照 Google Space 实现的导航栏效果,做的很漂亮!!
- ChangeTabLayout是模仿乐视LIVE App主界面TabLayout效果
-
FloatingActionButton
- 支持展开菜单的 Fab 按钮
- 效果很棒的 Fab 按钮
-
SnackBar/Toast
- 支持风格化和动画效果的 Toast,很漂亮
- 美化原生 Toast
- snackbar扩展,可以显示进度
- Android Dropdown 风格的 Alert 窗体
-
CardView
- 灵活的ShadowView,可替代CardView使用
Material Design控件库
- 一个兼容android 2.2material design组件库
- android material design 风格项目整理
- Material Design控件demo演示
自定义控件
-
Layout
- 任意View侧滑
- 类似 Facebook 闪烁式的 Load View组件,如TextView,ImageView
- Loading 状态的闪烁效果,类似 Facebook 的加载
- 类似 Facebook 加载时,条目的闪烁效果,酷酷的
- 斜角 View 效果,用来做 Profile 背景最适合不过
- Android 优雅的对角线效果
- 漂亮的弧形顶部布局效果
- 一个竖直方向的SlidingPanelLayout,支持加载多个Panel,可以灵活地实现漂亮的的交互效果,类似竖向卡片堆叠效果
- 可结合Behaviour使用的Android 展开型布局菜单
- Android通用圆角布局
-
AboutLayout/Preference
- Material Design 风格的 About 页面设计
- Material Design 风格的 About 页面
- 使用方便的的 Material Design 风格 Preference UI,包含一个根据规范自制的新的 SimpleMenuPreference
- Preference 中经常会遇到选颜色的问题,这个自定义组件,就是帮你解决Color Preferece 的问题
- about-page 2.0,全新的卡片风格,支持 Android DayNight,使用更加简单,API 更加丰富,新增「Android 应用友链」类型
-
ExpandableLayout
- 一种可根据展开是否超出屏幕来判断父控件是否自动滚动的ExpandableLayout
- 是一个实现树形内容展示的库
- 每个条目可展开布局效果
-
ParallaxLayout
- 视图分层视差效果
- 跟随手势滑动,显示隐藏标题栏、底部导航栏及悬浮按钮的 Android Behavior Library
- 一个下拉放大的RecyclerView
-
StatusLayout
- 一个支持多种状态的自定义View,可以方便的切换到:加载中视图、错误视图、空数据视图、网络异常视图、内容视图
- Android 布局多状态维护工具,实用
-
FlowLayout/TagView
- 自定义ViewGroup,实现多功能流式布局与网格布局
- Android流式布局,支持点击、单选、多选等,适合用于产品标签等,用法采用Adapter模式,和ListView、GridView用法一样!!!
- Android 流式标签布局
- Material Design 风格的 Tag (Chip) 标签组件,漂亮,实用
- 类似邮件发送,多个联系人标签排列
- 非常 Fancy 的选项过滤器
-
PullToRefresh
- 多种下拉刷新效果、上拉加载更多、可配置自定义头部广告位
- 一个自定义视图可以上下拉动,支持Scrollview,ListView,recyclerview,WebView和另一个视图,使用方便
- Android智能下拉刷新框架,支持越界回弹,集成了几十种炫酷的Header和 Footer
-
imageLoader
- glide安卓图片加载框架
- GlideImageView基于Glide封装的图片加载库
- GlideWebpDecoderGlide加载Webp动图
- Glide加载图片效果转换
- GlideWebpDecoderGlide加载Webp动图
- GlideImageView基于Glide V4.0封装的图片加载库,可以监听加载图片时的进度
- fresco
- picasso
- 图片加载框架的api封装,涵盖fresco,glide,picasso.最大程度优化内存,防止OOM
- Volley
- ImageLoaderFramework打造统一的图片加载框架,融合Glide(4.x),Fresco,不侵入业务代码,一套API兼容两种加载库
- sketch图片加载(兼容圆角、圆形、高斯模糊、图片按压效果,图片边框)
- sand使用JNI实现Sobel算子图像边缘检测
- Picasso,Glide,Fresco对比分析
- Universal Image Loader 是一个强大的、可高度定制的图片缓存,简称:UIL,可以高度配置的网络图片缓存库,非常灵活,用户量最多 。
-
SideBar
- 仿美团等选择城市列表demo
- 城市列表选择
- 仿汽车报价大全的sidebar
-
Gesture
- 手势返回
- 高仿最新版微信6.2手势滑动返回
- 滑动返回。支持微信滑动返回样式、横屏滑动返回、全屏滑动返回
- 手势滑动返回的Fragment
- 一款功能强大的滑动库,目前支持dialogfragment,activity,卡片,listView,RecyclerView,GridView等的滑动。
- Android手势监听
-
TipView/PoupView
- 给布局添加提示
- Android View Tooltips,目前来看做的最漂亮的
- 带箭头的TipVIew
- 带各种特效提示框,可调整提示位置
-
Badge
- 为你的应用程序加上数字角标
- 各个位置未读消息及设置各种徽章样式
- 一系列可绘制的 Badge
- 超级漂亮的一个高亮功能提醒效果
-
TimeLineView/StepView
- 时间线View
- Material Design时间线,步骤控件
- 时间线View
- 瀑布流时间轴
-
Banner
- 一个简单的Banner轮播
- 通用的广告栏控件,让你轻松实现广告头效果
- 各种切换动画轮播效果
- Android广告图片轮播控件
-
Guide
- 带你重新认识:Android Splash页秒开 Activity白屏 Activity黑屏
- Android 欢迎页开源项目
- 最最轻量级的新手引导库(只有7个类),能够快速的为一个Activity里的任何一个View控件创建一个遮罩式的导航页
- 支持引导路径高亮的方案
-
Theme
- Android主题切换(Theme)实现日夜间功能
- Android 切换皮肤方案,轻松实现
- RxJava 实现的主题切换引擎!
-
Shop
- 一款萌萌的计数器组件
-
LableView
- 仿小红书图片标签
-
图表
- 最知名的图标控件
- EasyChart图表
- 最低兼容Android 4.0,能够优雅直观的效果来为用户展示可视化数据。
- 一款可以*定制外观、手势旋转的android雷达图表lib
- 一个小巧且高效的线性图表组件,拥有完善的源码注释,可直接在实际项目中集成,同时也是一个不可错过学习项目
- Android 多边形绘制组件,用来做动态图表
- 模仿掌上英雄联盟能力分析效果
- 这是Android一个雷达扫描显示的扫描图,超高仿QQ附近的人搜索展示
-
TableLayout
- 支持多个方向滑动的 View,类似 Calendar 里的 UI 效果,类似表格
- 一个使用RecyclerView实现的表格
- 利用 TableLayout 实现的 CSV 文件加载和预览,可缩放拖动浏览
-
FloatView
- android 悬浮窗菜单,可在launcher或app中使用
- 播放控件悬浮View
-
Card
- 自定义卡片集view,支持展开收缩滚动
- Android 横向翻转效果,支持双面的 View 场景,类似信用卡
- 可自定义动画的卡片切换视图
- Android 信用卡交易效果 UI
- 仿探探喜欢卡片浏览
-
刮刮卡/优惠券
- 刮刮卡效果
- 锯齿边框,类似优惠劵效果的自定义 View
-
3D旋转/循环滚动
- TagCloudView是一个完全基于Android ViewGroup编写的控件,支持将一组View展示为一个3D球形集合,并支持全方向滚动。
- 3d旋转切换view,类似旋转木马效果。可以自动切换!
- 一个实现图片花式3D翻转效果的自定义View
- Android 透视三维体效果实现
-
Lock View/Pin
- Android自定义密码锁屏
- 毛玻璃效果的解锁界面
- 可能是目前最漂亮的 Android 手势解锁了
-
选座
- 电影票在线选座
- 机票座位在线选择android
- Android平台室内地图控件MapView
-
模仿系列
- 仿小米运动,目前做的最漂亮的一款脉搏效果
- 酷炫的碎纸机Andorid版本
- 仿支付宝芝麻信用分仪表盘效果
- 仿锤子闹钟
- 纯用SVG做的Google I/O 2016那个炫酷的时钟
- 在 Android 上模拟 Siri 录音动效
- 仿探探可拖拽的gridView,编辑个人资料,图片可拖拽排序
- 类似于chrome标签浏览器
- 在 Android 上,实现沃漂亮的罗诺伊图(多view不规则组合成一个)
自定义控相关链接
- 攻城师Sloop的微博客-自定义view教程
- 自定义View教程
- Android自定义View,包含炫酷 进度条,提交效果,支付密码等
- 腾讯团队开源的提高 Android UI 开发效率的 UI 库
三方工具
- 工具类
- AndroidUtilCode安卓工具库
- RxTool工具类集合
- logger漂亮的log打印工具
- libphonenumber全球手机号验证工具
- packer-ng-plugin多渠道打包
- 依赖注入
- kotlin中的依赖注入替换dagger2
- dagger是Java常用的依赖注入框架
- Koin是一款轻量级的依赖注入框架,根据官方的描述,它无代理,无代码生成,无反射。
- rx系列/包含时间通知
- RxJava
- RxAndroid
- RxLifecycle
- RxKotlin kotlin版本的rx
- RxCache rx版本的缓存
- RxBinding 事件绑定
- MvRx 响应式编程
- RxBus
- EventBus for Android,消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP
- UI适配方案
- 今日头像UI适配方案
- 投屏
- 开源免费在电脑显示手机画面并控制手机的工具 (投屏/录屏/免Root)
- Shape替代方案
- Shape替代方案BackgroundLibrary
- ui
- 一个简洁而优雅的Android原生UI框架,解放你的双手!图片圆角控件
- 性能优化
- 一个能让你了解所有函数调用顺序以及函数耗时的Android库(无需侵入式代码)
- Android 上展示 FPS 的悬浮组件
- android免root兼容所有版本ui调试工具
- 一行代码即可监听 App 中所有网络链接的上传以及下载进度,包括 Glide 的图片加载进度
- Gradle 插件,做自动测试过程中的截屏
- APP开发UI测试工具Hyperion
- 内存泄露检测工具LeakCanary
- APK资源压缩
- DoraemonKit简称 "DoKit" 。一款功能齐全的客户端( iOS 、Android )研发助手
- UETool 是一个各方人员(设计师、程序员、测试)都可以使用的调试工具。它可以作用于任何显示在屏幕上的 view,比如 Activity/Fragment/Dialog/PopupWindow 等等。
- Router
- 一款简单的Android端用于Activity跳转的路由框架
- 实现仿 Retrofit 的跳转路由
- 可能是目前最简单、灵活的路由框架
- Floo 开源了,一个支持 AOP、栈控制、跨页面带信、和动态变更映射的 URL 路由
- ARouter组件化路由框架
- 组件化
- CC是一套基于组件总线的、支持渐进式改造的、支持跨进程调用的、完整的Android组件化框架
- 一套完整有效的android组件化方案,支持组件的组件完全隔离、单独调试、集成调试、组件交互、UI跳转、动态加载卸载等功能
- JIMU(积木)是一套Android组件化框架,支持组件的代码资源隔离、单独调试、集成调试、组件交互、UI跳转、生命周期等完整功能。
- MVPArms 官方快速组件化方案
- NetWork
- 轻量级 Android Socket 通信框架
- retrofit是OkHttp的加强版
- Http标准协议框架,支持多种缓存模式,底层可动态切换OkHttp、URLConnection
- HTTP是现代应用常用的一种交换数据和媒体的网络方式
- kotlin版本网络请求
- Kalle是Nohttp升级加强版
- Novate链式调用网络请求
- 基于okhttp和RxJava封装的WebSocket
- RxJava2 + OkHttp 30秒上手,新一代OkHttp请求神器,史上最优雅的实现文件上传/下载/进度监听、动态/多域名、缓存;支持第三方数据解析工具、自定义请求、自动关闭请求等等
- RxNetty
- ion 一个异步网络请求和图片加载的库,一个库能搞定几乎所有的网络请求。
- IM
- 各种聊天气泡
- 一起来撸个朋友圈吧
- websocket微信聊天不是事
- Aurora IMUI,一个通用的即时通讯库。不局限于任何 IM SDK,现在已经支持 React Native
- 基于Netty+TCP+Protobuf实现的Android IM库,包含Protobuf序列化、TCP拆包与粘包、长连接握手认证、心跳机制、断线重连机制、消息重发机制、读写超时机制、离线消息、线程池等功能。
- 源码提供!Android即时通讯和sns开源项目汇总
- Keyboard/Emoji
- 一个让你的Android应用支持emoji的库
- Blur/LowPloy
- 类似ios的动态模糊效果
- Android 高性能实时模糊(Blur) View 效果
- 目前来看做 Blur 效果速度最快的库
- 基于 RenderScript 实现的模糊效果,支持多种方式的模糊,如静态模糊,实时模糊还有模糊动画
- LowPoly
- 又一个LowPoly图片, 另外这个还可以让图片变成沙画
- 指纹
- android指纹识别动画
- 安卓指纹识别API封装!集成了安卓官方API!三星指纹API!魅族指纹API!一键集成!
- 腾讯开源, 在Android设备上实现可信的指纹认证
- ImageCompress
- Luban可能是最接近微信朋友圈的图片压缩算法
- 超实用的 Android 图片压缩工具
- Android图片压缩框架-Tiny
- ImageCrop
- 一个优秀的图片裁剪库
- 智能图片裁剪框架,适用于身份证,名片,文档等照片的裁剪。
- PhotoFilters
- 滤镜SDK
- 支持常见的一些图片滤镜效果函数
- 使用JNI实现Sobel算子图像边缘检测
- 遮罩对比图效果组件
- 图形编辑开源库,支持自定义贴图 图片滤镜 图片旋转 以及图片剪裁操作
- ImageSelector
- android多图选择 图片/视频 单选or多选,以及视频录制
- 知乎开源图片选择器
- Library for picking pictures from gallery or camera
- 基于 Bottom Sheet 实现的图片选择器,交互效果不错
- RxJava实现的图片选择库
- A Library help u to pick photos.
- Android OpenGL ES 2.0/3.0 Engine
- 仿微信大图查看(拖拽)、视频全屏
- ImageWatcher仿微信大图查看
- subsampling-scale-image-view长图预览
- 大图预览
- Android自定义相机实现身份证拍照,并加入自动对焦与图片不规则裁剪。
- Camera
- 一个简单易于继承的相机Fragment
- 一个高级且易于使用的相机库
- 从两个摄像头同时拍下某一个瞬间
- Android 有两套相机 Api, Foto 开源了他们在 Android 上的 Camera 封装 Api
- DownLoad
- Android 文件下载引擎,稳定、高效、简单易用
- 基于RxJava打造的多线程下载工具, 支持断点续传下载管理等
- 强大的 Android 下载上传组件
- Java 实现的 DHT 协议,其实就是 BitTorrent,轻松在 Android 上实现一个 P2P 下载了
- http下载工具,支持多连接分块下载
- FileDownloader升级版|
- ProgressManager各种下载进度监听
- Video
- 一个适用于 Android 平台的音视频播放器 SDK,可高度定制化和二次开发,为 Android 开发者提供了简单、快捷的接口,帮助开发者在 Android 平台上快速开发播放器应用。
- Android 实现视屏播放器、边播边缓存功能
- 支持视频 Preview 效果的 Seekbar
- 谷歌ExoPlayer播放器
- B站IJK播放器
- Exoplayer第三方库Exomedia进行扩展开发
- 金山视频云播放器
- VlC播放器
- 饺子视频播放器(原来的节操播放器)
- 一款好用的音乐播放器
- 谷歌播放器参考方案
- 一种将解码器和播放视图组件化处理的解决方案框架
- 跨平台的视频采集、直播SDK SmarterStreaming
- RTMP协议的推流拉流客户端
- 视频缓存方案AndroidVideoCache
- 这里是Android上最好的开源弹幕引擎·烈焰弹幕使 DanmakuFlameMaster
- Vid eoEdit
- 高仿微信视频录制,涂鸦水印添加, 基于ffmpeg视频编辑
- ExoPlayer基于OpenGL实现的滤镜效果
- PLDroidShortVideo 是七牛推出的一款适用于 Android 平台的短视频 SDK
- Audio
- Android声音录制和播放封装库
- 通话录音
- Android MP3录制,波形显示,音频权限兼容与播放
- 一个很棒的Recorder项目
- 一个有趣的Android录音动画
- AudioEdit
- 转换QQ微信语音格式转为mp3
- 把音乐的音频提出来,做成音轨
- 直播
- 励志成为较全的直播技术导航_AnyRTC
- Yasea是一个100%纯Java写的,完全开源的安卓直播推流客户端。
- RTMP 推流器,RTMP(HLS)秒开播放器,跨平台(Win,IOS,Android)开源代码
- Android上专为视屏直播打造的轻量级弹幕库
- TV
- 这是一个TV 桌面,包含了一个Leanback 桌面
- Share/Login
- 第三方登录分享组件封装
- 第三方SDK集成库(授权/分享/支付)
- 非常簡單易用的social login library(Facebook, Google, Twitter, Instagram)
- PushService
- 更方便的将各个rom厂商自己的推送服务进行集成,并统一管理
- 在任何非 MIUI 设备上体验小米系统级推送
- App更新
- 可任意定制的app更新组件。
- app下载安装更新
- JS/WebView
- AgentWeb 是基于 Android WebView 一个轻量级浏览器库
- 腾讯开源 H5 加速加载方案
- 插件化/Hybrid
- 最接近原生APP体验的高性能框架
- Android插件框架,免安装运行插件APK ,支持独立插件和非独立插件
- 它是一个腾讯自主研发的 Android 插件框架,经过线上亿级用户量检验。Shadow 不仅开源分享了插件技术的关键代码,还完整的分享了上线部署所需要的所有设计。
- - 通过Gradle Transform和aspectj来实现代码动态修改,业务逻辑数据埋点、性能数据统计等侵入性修改从此不再需要修改业务代码,完美解决Dexposed兼容性问题,实现代码自动插桩。
- ORM/SQLite/SharePreferences
- 利用 KeyStore 存储密码,加密 SharedPreference 的数据,保证安全性
- 一个简单的 SQLite 和 Excel 互相转换的库子
- MMKV高效且轻量的数据存储工具
- WCDB是微信移动端团队开源的移动端数据库组件
- ObjectBox是一个超级快速的数据库,专门为IoT和移动设备构建
- greenDAO是一款开源的面向 Android 的轻便、快捷的 ORM 框架
- DBFLOW是一个为Android设计的简单高效的数据库类库
- 开源的Android数据库框架,采用了对象关系映射(ORM)的模式
- 可以替代SQLite以及ORM Libraries的轻量级数据库
- QRCODE
- 扫描二维码、扫描条形码、相册获取图片后识别、生成带Logo二维码、支持微博微信QQ二维码扫描样式
- 生成二维码和从图片解析二维码库
- C++ port of ZXing for Android
- Bluetooth
- Android BLE 蓝牙开发框架,使用简单的回调方式一步处理搜索、连接、notify、indicate、读、写等一系列蓝牙操作
- 热更新
- 微信的Tinker、QQ空间的超级补丁、手机QQ的QFix
- AndFix、Dexposed、阿里百川、Sophix
- 美团的Robust、饿了么的Amigo、美丽说蘑菇街的Aceso
- 权限
- google官方出品权限申请库
- Android Permission 辅助检测和申请工具库
- RxPermissions基于RxJava2的权限请求
- AndPermission采用链式调用方式
- HuGePermission强大的运行时权限
- 文件选择
- 又一款 MD 风格的 Android 文件选择器组件,支持文件分类选取,交互不错
- 效果超赞的文件选择器
- Android 简洁优雅的文件选择器
- 自定义打开指定文件的应用选择器
- VR/AR
- AR 开发者必备资源汇总
- VR 开发者必备资源汇总
- Map
- Google Map 易用性封装,支持切换主题,ListView 展示等小功能
- Launcher Shortcut
- 动态更新 Android launcher App Icon
- 如何写一个优雅的 Android Launcher
- Other
- 一个获取号码归属地和其他信息(诈骗、骚扰等)的开源库
- 添加、识别电话号码归属国家
- 可以读取SD卡,asset文件夹,或者网络下载的pdf文件的widget
- 可读取pdf文件的view
- 一个超轻超薄的Android工具库,阻止三方SDK中常见的严重影响用户体验的『链式唤醒』行为
- 防撤回神器
- 一个强大的selector注入器
- 基于Tesseract-OCR实现自动扫描识别手机号
- Java 实现的自然语言处理 中文分词 词性标注 命名实体识别 依存句法分析 关键词提取 自动摘要 短语提取 拼音 简繁转换
Animations
- 动画
- android控件动画集合
- 在 Android 轻松绘制 Vector 动画
- Android SVG 动画效果,做的非常棒
- Android 动画管理库,辅助你管理动画效果,实现类似Facebook布局加载效果
- 一个使用openGL渲染的炫丽Android动画库 MagicSurfaceView
- Android Easing 函数库,动画
- 当数学遇上动画:讲述ValueAnimator、TypeEvaluator和TimeInterpolator之间的恩恩怨怨
- 通过de Casteljau算法绘制贝塞尔曲线,并计算它的切线,实现1-7阶贝塞尔曲线的形成动画
- id 所有动画系列详尽教程
- Android 一共有多少种动画?准确告诉你!
- Android应用开发之所有动画使用详解
- Loading UI
- 各种各样Loading动画
- 各种 Loading 动画效果
- GIfLoading动画
- 各种动画效果的LoadingView
- 一些酷炫的加载动画, 可以与任何View配合使用,作为加载动画或者Progressbar,
- 一个贝塞尔曲线实现的利用圆球拖拽粘连动画效果的加载进度条
- 仿支付宝实现的一个笑脸 LoadingView 效果。
- google now的loading样式
- 微软Metro-style Loading
- Lottie安卓动画
- Transitions-EverywhereAndroid 动画交互
- 使用 SVGAPlayer 在 Android、iOS、Web中播放 After Effects / Animate CC (Flash) 动画
- AndroidCustomView带你走进自定义View的美妙世界
- 赞
- 点赞效果 类似twitter的效果
- 自定义动画
- Android自定义动画酷炫的提交按钮
- 雪花,粒子爆炸效果
- Android 粒子动画效果,做个有逼格的 App,就靠这些了
- 多种形状波纹特效,可以用来实现一些背景特效
源码系列
- android sdk 源码解析
- Android源码设计模式分析项目
- Android 开源项目源码解析
- Google I/O 大会 App 的最新源代码
- wanAndroid玩安卓uniapp版
- 基于AndroidX的架构,包含 Fuel+Rxjava+RxCache+MvRx+Epoxy(Sticky)等,全新的玩法很适合学习
- Jetpack-MVVM-Best-Practice是 难得一见 的 Jetpack MVVM 最佳实践!在 蕴繁于简 的代码中,对 视图控制器 乃至 标准化开发模式 形成正确、深入的理解!
- 综合案例训练,包含新闻,视频,图片,音乐,记事本等等模块。架构模式:采用MVP+Rx+Retrofit+Desgin+Dagger2+阿里VLayout+腾讯X5+腾讯bugly
- AndroidProject非常不错的项目值得学习
链接
- Trinea大神整理的开源项目库
- 正在成为史上最全分类Android开源代码大全
- 自己总结的Android开源项目及库
- 把 Awesome 系列再筛选一次,优质的 Android 开发库集合
- 英文版Android开源UI框架分类
- 一个整理即时通讯(IM)和社交系统(SNS)优秀开源项目的文档
- Android百大框架排行榜
资料不区分前端和后端
- 基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构,提供整套公共微服务服务模块
- Java实现的设计模式
- Flutter学习资料
- Flutter学习demo
- Flutter中文网学习资料
- Flutter库
- 安卓学习导航
- Kotlin学习资料
- 安卓UI相关开
- react 官网
- umi脚手架官网
- Ant Design通用组件官网
- Ant Design Pro官网
- 数据流处理官网
- 简约教程及Demo
- SpringBoot整套学习资料
- docker整套学习资料
- spring-boot整套学习Demo
- spring-boot整套学习和Demo
- spring-boot整套学习和Demo
- spring-boot整套学习
- Java知识体系最强总结(2020版)
- 【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识
- 你所需要的算法学习都在这里
作者:旧城回眸丶凌乱一丗浮沉
链接:https://juejin.im/post/5d1b7dfbf265da1ba56b38a6
来源:掘金
上一篇: 安卓10与安卓9有什么不同?
下一篇: tts初始化失败 一加一个数据库
推荐阅读
-
整理了三方框架,给大家分享。
-
SSM三大框架基础面试题-一、Spring篇 什么是Spring框架? Spring是一种轻量级框架,提高开发人员的开发效率以及系统的可维护性。 我们一般说的Spring框架就是Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、消息和测试模块。比如Core Container中的Core组件是Spring所有组件的核心,Beans组件和Context组件是实现IOC和DI的基础,AOP组件用来实现面向切面编程。 Spring的6个特征: 核心技术:依赖注入(DI),AOP,事件(Events),资源,i18n,验证,数据绑定,类型转换,SpEL。 测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。 数据访问:事务,DAO支持,JDBC,ORM,编组XML。 Web支持:Spring MVC和Spring WebFlux Web框架。 集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。 语言:Kotlin,Groovy,动态语言。 列举一些重要的Spring模块? Spring Core:核心,可以说Spring其他所有的功能都依赖于该类库。主要提供IOC和DI功能。 Spring Aspects:该模块为与AspectJ的集成提供支持。 Spring AOP:提供面向切面的编程实现。 Spring JDBC:Java数据库连接。 Spring JMS:Java消息服务。 Spring ORM:用于支持Hibernate等ORM工具。 Spring Web:为创建Web应用程序提供支持。 Spring Test:提供了对JUnit和TestNG测试的支持。 谈谈自己对于Spring IOC和AOP的理解 IOC(Inversion Of Controll,控制反转)是一种设计思想: 在程序中手动创建对象的控制权,交由给Spring框架来管理。IOC在其他语言中也有应用,并非Spring特有。IOC容器实际上就是一个Map(key, value),Map中存放的是各种对象。 将对象之间的相互依赖关系交给IOC容器来管理,并由IOC容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。在实际项目中一个Service类可能由几百甚至上千个类作为它的底层,假如我们需要实例化这个Service,可能要每次都搞清楚这个Service所有底层类的构造函数,这可能会把人逼疯。如果利用IOC的话,你只需要配置好,然后在需要的地方引用就行了,大大增加了项目的可维护性且降低了开发难度。 Spring中的bean的作用域有哪些? 1.singleton:该bean实例为单例 2.prototype:每次请求都会创建一个新的bean实例(多例)。 3.request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。 4.session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。 5.global-session:全局session作用域,仅仅在基于Portlet的Web应用中才有意义,Spring5中已经没有了。Portlet是能够生成语义代码(例如HTML)片段的小型Java Web插件。它们基于Portlet容器,可以像Servlet一样处理HTTP请求。但是与Servlet不同,每个Portlet都有不同的会话。 Spring中的单例bean的线程安全问题了解吗? 概念用于理解:大部分时候我们并没有在系统中使用多线程,所以很少有人会关注这个问题。单例bean存在线程问题,主要是因为当多个线程操作同一个对象的时候,对这个对象的非静态成员变量的写操作会存在线程安全问题。 有两种常见的解决方案(用于回答的点): 1.在bean对象中尽量避免定义可变的成员变量(不太现实)。 2.在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal(线程本地化对象)中(推荐的一种方式)。 ThreadLocal解决多线程变量共享问题(参考博客):https://segmentfault.com/a/1190000009236777 Spring中Bean的生命周期: 1.Bean容器找到配置文件中Spring Bean的定义。 2.Bean容器利用Java Reflection API创建一个Bean的实例。 3.如果涉及到一些属性值,利用set方法设置一些属性值。 4.如果Bean实现了BeanNameAware接口,调用setBeanName方法,传入Bean的名字。 5.如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader方法,传入ClassLoader对象的实例。 6.如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory方法,传入ClassLoader对象的实例。 7.与上面的类似,如果实现了其他*Aware接口,就调用相应的方法。 8.如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执postProcessBeforeInitialization方法。 9.如果Bean实现了InitializingBean接口,执行afeterPropertiesSet方法。 10.如果Bean在配置文件中的定义包含init-method属性,执行指定的方法。 11.如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization方法。 12.当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy方法。 13.当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。 Spring框架中用到了哪些设计模式? 1.工厂设计模式:Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对象。 2.代理设计模式:Spring AOP功能的实现。 3.单例设计模式:Spring中的bean默认都是单例的。 4.模板方法模式:Spring中的jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模板模式。 5.包装器设计模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。 6.观察者模式:Spring事件驱动模型就是观察者模式很经典的一个应用。 7.适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式、Spring MVC中也是用到了适配器模式适配Controller。 还有很多。。。。。。。 @Component和@Bean的区别是什么 1.作用对象不同。@Component注解作用于类,而@Bean注解作用于方法。 2.@Component注解通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用@ComponentScan注解定义要扫描的路径)。@Bean注解通常是在标有该注解的方法中定义产生这个bean,告诉Spring这是某个类的实例,当我需要用它的时候还给我。 3.@Bean注解比@Component注解的自定义性更强,而且很多地方只能通过@Bean注解来注册bean。比如当引用第三方库的类需要装配到Spring容器的时候,就只能通过@Bean注解来实现。 @Configuration public class AppConfig { @Bean public TransferService transferService { return new TransferServiceImpl; } } <beans> <bean id="transferService" class="com.kk.TransferServiceImpl"/> </beans> @Bean public OneService getService(status) { case (status) { when 1: return new serviceImpl1; when 2: return new serviceImpl2; when 3: return new serviceImpl3; } } 将一个类声明为Spring的bean的注解有哪些? 声明bean的注解: @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller 在展现层使用,控制器的声明 注入bean的注解: @Autowired:由Spring提供 @Inject:由JSR-330提供 @Resource:由JSR-250提供 *扩:JSR 是 java 规范标准 Spring事务管理的方式有几种? 1.编程式事务:在代码中硬编码(不推荐使用)。 2.声明式事务:在配置文件中配置(推荐使用),分为基于XML的声明式事务和基于注解的声明式事务。 Spring事务中的隔离级别有哪几种? 在TransactionDefinition接口中定义了五个表示隔离级别的常量:ISOLATION_DEFAULT:使用后端数据库默认的隔离级别,Mysql默认采用的REPEATABLE_READ隔离级别;Oracle默认采用的READ_COMMITTED隔离级别。ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。 Spring事务中有哪几种事务传播行为? 在TransactionDefinition接口中定义了八个表示事务传播行为的常量。 支持当前事务的情况:PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)。 不支持当前事务的情况:PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常。 其他情况:PROPAGATION_NESTED: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于PROPAGATION_REQUIRED。 二、SpringMVC篇 什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。 Spring MVC的工作原理了解嘛? image.png Springmvc的优点: (1)可以支持各种视图技术,而不仅仅局限于JSP; (2)与Spring框架集成(如IoC容器、AOP等); (3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。 (4) 支持各种请求资源的映射策略。 Spring MVC的主要组件? (1)前端控制器 DispatcherServlet(不需要程序员开发) 作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。 (2)处理器映射器HandlerMapping(不需要程序员开发) 作用:根据请求的URL来查找Handler (3)处理器适配器HandlerAdapter 注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。 (4)处理器Handler(需要程序员开发) (5)视图解析器 ViewResolver(不需要程序员开发) 作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view) (6)视图View(需要程序员开发jsp) View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等) springMVC和struts2的区别有哪些? (1)springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。 (2)springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。 (3)Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。 SpringMVC怎么样设定重定向和转发的? (1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4" (2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com" SpringMvc怎么和AJAX相互调用的? 通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 : (1)加入Jackson.jar (2)在配置文件中配置json的映射 (3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。 如何解决POST请求中文乱码问题,GET的又如何处理呢? (1)解决post请求乱码问题: 在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8; <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> (2)get请求中文参数出现乱码解决方法有两个: ①修改tomcat配置文件添加编码与工程编码一致,如下: <ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> ②另外一种方法对参数进行重新编码: String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8") ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。 Spring MVC的异常处理 ? 统一异常处理: Spring MVC处理异常有3种方式: (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver; (2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器; (3)使用@ExceptionHandler注解实现异常处理; 统一异常处理的博客:https://blog.csdn.net/ctwy291314/article/details/81983103 SpringMVC的控制器是不是单例模式,如果是,有什么问题,怎么解决? 是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写成员变量。(此题目类似于上面Spring 中 第5题 有两种解决方案) SpringMVC常用的注解有哪些? @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。 @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。 @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。 SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代? 一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置? 可以在@RequestMapping注解里面加上method=RequestMethod.GET。 怎样在方法里面得到Request,或者Session? 直接在方法的形参中声明request,SpringMVC就自动把request对象传入。 如果想在拦截的方法里面得到从前台传入的参数,怎么得到? 直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象? 直接在方法中声明这个对象,SpringMVC就自动会把属性赋值到这个对象里面。 SpringMVC中函数的返回值是什么? 返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的。 SpringMVC用什么对象从后台向前台传递数据的? 通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以拿到数据。 怎么样把ModelMap里面的数据放入Session里面? 可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。 SpringMvc里面拦截器是怎么写的: 有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可: <!-- 配置SpringMvc的拦截器 --> <mvc:interceptors> <!-- 配置一个拦截器的Bean就可以了 默认是对所有请求都拦截 --> <bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor"></bean> <!-- 只针对部分请求拦截 --> <mvc:interceptor> <mvc:mapping path="/modelMap.do" /> <bean class="com.zwp.action.MyHandlerInterceptorAdapter" /> </mvc:interceptor> </mvc:interceptors> 注解原理: 注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池 三、Mybatis篇 什么是MyBatis? MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 讲下MyBatis的缓存 MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有, 二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口, 可在它的映射文件中配置<cache/> Mybatis是如何进行分页的?分页插件的原理是什么? 1)Mybatis使用RowBounds对象进行分页,也可以直接编写sql实现分页,也可以使用Mybatis的分页插件。 2)分页插件的原理:实现Mybatis提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql。 举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10 简述Mybatis的插件运行原理,以及如何编写一个插件? 1)Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、 Executor这4种接口的插件,Mybatis通过动态代理, 为需要拦截的接口生成代理对象以实现接口方法拦截功能, 每当执行这4种接口对象的方法时,就会进入拦截方法, 具体就是InvocationHandler的invoke方法,当然, 只会拦截那些你指定需要拦截的方法。 2)实现Mybatis的Interceptor接口并复写intercept方法, 然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可, 记住,别忘了在配置文件中配置你编写的插件。 Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不? 1)Mybatis动态sql可以让我们在Xml映射文件内, 以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能。 2)Mybatis提供了9种动态sql标签:trim|where|set|foreach|if|choose|when|otherwise|bind。 3)其执行原理为,使用OGNL从sql参数对象中计算表达式的值, 根据表达式的值动态拼接sql,以此来完成动态sql的功能。 #{}和${}的区别是什么? 1)#{}是预编译处理,${}是字符串替换。 2)Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值(有效的防止SQL注入); 3)Mybatis在处理${}时,就是把${}替换成变量的值。 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里? Hibernate属于全自动ORM映射工具, 使用Hibernate查询关联对象或者关联集合对象时, 可以根据对象关系模型直接获取,所以它是全自动的。 而Mybatis在查询关联对象或关联集合对象时, 需要手动编写sql来完成,所以,称之为半自动ORM映射工具。 Mybatis是否支持延迟加载?如果支持,它的实现原理是什么? 1)Mybatis仅支持association关联对象和collection关联集合对象的延迟加载, association指的就是一对一,collection指的就是一对多查询。 在Mybatis配置文件中, 可以配置是否启用延迟加载lazyLoadingEnabled=true|false。 2)它的原理是,使用CGLIB创建目标对象的代理对象, 当调用目标方法时,进入拦截器方法, 比如调用a.getB.getName, 拦截器invoke方法发现a.getB是null值, 那么就会单独发送事先保存好的查询关联B对象的sql, 把B查询上来,然后调用a.setB(b), 于是a的对象b属性就有值了, 接着完成a.getB.getName方法的调用。 这就是延迟加载的基本原理。 MyBatis与Hibernate有哪些不同? 1)Mybatis和hibernate不同,它不完全是一个ORM框架, 因为MyBatis需要程序员自己编写Sql语句, 不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句, 并将java对象和sql语句映射生成最终执行的sql, 最后将sql执行的结果再映射生成java对象。 2)Mybatis学习门槛低,简单易学,程序员直接编写原生态sql, 可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发, 例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁, 一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性, 如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。 3)Hibernate对象/关系映射能力强,数据库无关性好, 对于关系模型要求高的软件(例如需求固定的定制化软件) 如果用hibernate开发可以节省很多代码,提高效率。 但是Hibernate的缺点是学习门槛高,要精通门槛更高, 而且怎么设计O/R映射,在性能和对象模型之间如何权衡, 以及怎样用好Hibernate需要具有很强的经验和能力才行。 总之,按照用户的需求在有限的资源环境下只要能做出维护性、 扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。 MyBatis的好处是什么? 1)MyBatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写, 给程序的维护带来了很大便利。 2)MyBatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象, 大大简化了Java数据库编程的重复工作。 3)因为MyBatis需要程序员自己去编写sql语句, 程序员可以结合数据库自身的特点灵活控制sql语句, 因此能够实现比Hibernate等全自动orm框架更高的查询效率,能够完成复杂查询。 简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系? Mybatis将所有Xml配置信息都封装到All-In-One重量级对象Configuration内部。 在Xml映射文件中,<parameterMap>标签会被解析为ParameterMap对象, 其每个子元素会被解析为ParameterMapping对象。 <resultMap>标签会被解析为ResultMap对象, 其每个子元素会被解析为ResultMapping对象。 每一个<select>、<insert>、<update>、<delete> 标签均会被解析为MappedStatement对象, 标签内的sql会被解析为BoundSql对象。 什么是MyBatis的接口绑定,有什么好处? 接口映射就是在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定, 我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置. 接口绑定有几种实现方式,分别是怎么实现的? 接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加 上@Select@Update等注解里面包含Sql语句来绑定, 另外一种就是通过xml里面写SQL来绑定,在这种情况下, 要指定xml映射文件里面的namespace必须为接口的全路径名. 什么情况下用注解绑定,什么情况下用xml绑定? 当Sql语句比较简单时候,用注解绑定;当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多 MyBatis实现一对一有几种方式?具体怎么操作的? 有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在resultMap里面配置association节点配置一对一的类就可以完成; 嵌套查询是先查一个表,根据这个表里面的结果的外键id, 去再另外一个表里面查询数据,也是通过association配置, 但另外一个表的查询通过select属性配置。 Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别? 能,Mybatis不仅可以执行一对一、一对多的关联查询, 还可以执行多对一,多对多的关联查询,多对一查询, 其实就是一对一查询,只需要把selectOne修改为selectList即可; 多对多查询,其实就是一对多查询,只需要把selectOne修改为selectList即可。 关联对象查询,有两种实现方式,一种是单独发送一个sql去查询关联对象, 赋给主对象,然后返回主对象。另一种是使用嵌套查询,嵌套查询的含义为使用join查询, 一部分列是A对象的属性值,另外一部分列是关联对象B的属性值, 好处是只发一个sql查询,就可以把主对象和其关联对象查出来。 MyBatis里面的动态Sql是怎么设定的?用什么语法? MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来实现, 但是如果要写的完整,必须配合where,trim节点,where节点是判断包含节点有 内容就插入where,否则不插入,trim节点是用来判断如果动态语句是以and 或or 开始,那么会自动把这个and或者or取掉。 Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式? 第一种是使用<resultMap>标签,逐一定义列名和对象属性名之间的映射关系。 第二种是使用sql列的别名功能,将列别名书写为对象属性名, 比如T_NAME AS NAME,对象属性名一般是name,小写, 但是列名不区分大小写,Mybatis会忽略列名大小写,