什么是AOP

AOP是Aspect Oriented Programming的缩写,即『面向切面编程』。它和我们平时接触到的OOP都是编程的不同思想,OOP,即『面向对象编程』,它提倡的是将功能模块化,对象化,而AOP的思想,则不太一样,它提倡的是针对同一类问题的统一处理,当然,我们在实际编程过程中,不可能单纯的安装AOP或者OOP的思想来编程,很多时候,可能会混合多种编程思想,大家也不必要纠结该使用哪种思想,取百家之长,才是正道。
那么AOP这种编程思想有什么用呢,一般来说,主要用于不想侵入原有代码的场景中,例如SDK需要无侵入的在宿主中插入一些代码,做日志埋点、性能监控、动态权限控制、甚至是代码调试等等。
AspectJ
AspectJ实际上是对AOP编程思想的一个实践,当然,除了AspectJ以外,还有很多其它的AOP实现,例如ASMDex,但目前最好、最方便的,依然是AspectJ。
在Android项目中使用AspectJ
在android中配置aspectj是特别麻烦的,尝试在android studio中直接配置aspectj,折腾了半天没有成功,就放弃了,还好github上有个开源的sdkhttps://github.com/HujiangTechnology/gradle_plugin_android_aspectjx,可以直接拿来用,很方便。
接入说明
在项目的根目录的build.gradle文件中添加依赖,修改后文件如下
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:1.0.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
然后在项目或者库的build.gradle文件中添加AspectJ的依赖
compile 'org.aspectj:aspectjrt:1.8.9'
同时在该文件中加入AspectJX模块
apply plugin: 'android-aspectjx'
aspectjx默认会遍历项目编译后所有的.class文件和依赖的第三方库去查找符合织入条件的切点,为了提升编译效率,可以加入过滤条件指定遍历某些库或者不遍历某些库。
includeJarFilter和excludeJarFilter可以支持groupId过滤,artifactId过滤,或者依赖路径匹配过滤
aspectjx {
//织入遍历符合条件的库
includeJarFilter 'universal-image-loader', 'AspectJX-Demo/library'
//排除包含‘universal-image-loader'的库
excludeJarFilter 'universal-image-loader'
}
使用
创建一个AspectTest的类,
@Aspect
public class AspectTest {
final String TAG = AspectTest.class.getSimpleName();
@Before("execution(* *..MainActivity+.on**(..))")
public void method(JoinPoint joinPoint) throws Throwable {
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
String className = joinPoint.getThis().getClass().getSimpleName();
Log.e(TAG, "class:" + className);
Log.e(TAG, "method:" + methodSignature.getName());
}
}
MainActivty的代码如下
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
log如下
log
通过build之后会生成一个aspected.jar的文件
截图
反编译这个jar,会发现它在MainActivity的onCreate中插入了几行代码。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# aspectj
# 在Android项目中使用AspectJ的方法
# Android AOP框架AspectJ使用详解
# AndroidStudio 配置 AspectJ 环境实现AOP的方法
# 在Android项目中使用AspectJ的详细攻詻
# 遍历
# 的是
# 都是
# 也不
# 不可能
# 有个
# 才是
# 不太
# 半天
# 可以直接
# 它在
# 第三方
# 哪种
# 后会
# 主要用于
# 还有很多
# 接触到
# 很方便
# 该文件
# 创建一个
相关文章:
建站之星北京办公室:智能建站系统与小程序生成方案解析
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
Android使用GridView实现日历的简单功能
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
如何规划企业建站流程的关键步骤?
上海网站制作开发公司,上海买房比较好的网站有哪些?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
建站之星好吗?新手能否轻松上手建站?
内网网站制作软件,内网的网站如何发布到外网?
如何在阿里云ECS服务器部署织梦CMS网站?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
如何制作算命网站,怎么注册算命网站?
如何在阿里云虚拟主机上快速搭建个人网站?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
宝塔新建站点为何无法访问?如何排查?
定制建站是什么?如何实现个性化需求?
建站之星如何实现PC+手机+微信网站五合一建站?
如何在腾讯云服务器上快速搭建个人网站?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
如何快速搭建自助建站会员专属系统?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
制作营销网站公司,淘特是干什么用的?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
制作门户网站的参考文献在哪,小说网站怎么建立?
如何挑选优质建站一级代理提升网站排名?
在线制作视频网站免费,都有哪些好的动漫网站?
如何选择高性价比服务器搭建个人网站?
建站主机选择指南:服务器配置与SEO优化实战技巧
网站制作话术技巧,网站推广做的好怎么话术?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何通过智能用户系统一键生成高效建站方案?
如何快速搭建个人网站并优化SEO?
如何通过建站之星自助学习解决操作问题?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何用西部建站助手快速创建专业网站?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何通过VPS建站无需域名直接访问?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
中山网站推广排名,中山信息港登录入口?
建站主机选购指南:核心配置与性价比推荐解析
香港服务器建站指南:免备案优势与SEO优化技巧全解析
建站VPS配置与SEO优化指南:关键词排名提升策略
网站微信制作软件,如何制作微信链接?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
C++中引用和指针有什么区别?(代码说明)
*请认真填写需求信息,我们会在24小时内与您取得联系。