美文网首页
面向切面思想

面向切面思想

作者: Lucky胡 | 来源:发表于2019-11-23 17:11 被阅读0次

AspectJ使用

程序源码地址:https://github.com/Hujunjob/ArchitecturePro

1、AspectJ环境配置说明
build:gradle 3.0.0 gradle4.4-all ndk r17 无警告
build:gradle 3.2.1 gradle4.6-all 无警告
build:gradle 3.4.0 gradle5.1.1-all 有过时的api警告

2、配置
根目录的build.gradle

    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files

        //AspectJ配置
        classpath 'org.aspectj:aspectjtools:1.8.9'
        classpath 'org.aspectj:aspectjweaver:1.8.9'
    }

在module的build.gradle添加

//编译时用AspectJ专门的编译器,不再使用传统的javac编译
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        //AspectJ配置
        classpath 'org.aspectj:aspectjtools:1.8.9'
        classpath 'org.aspectj:aspectjweaver:1.8.9'
    }
}

引入包:

    implementation 'org.aspectj:aspectjrt:1.8.13'

AspectJ配置


// 版本界限:As-3.0.1 + gradle4.4-all (需要配置r17的NDK环境)
// 或者:As-3.2.1 + gradle4.6-all (正常使用,无警告)
import org.aspectj.bridge.IMessage
import org.aspectj.bridge.MessageHandler
import org.aspectj.tools.ajc.Main

final def log = project.logger
final def variants = project.android.applicationVariants

variants.all { variant ->
    if (!variant.buildType.isDebuggable()) {
        log.debug("Skipping non-debuggable build type '${variant.buildType.name}'.")
        return;
    }

    JavaCompile javaCompile = variant.javaCompile
    javaCompile.doLast {
        String[] args = ["-showWeaveInfo",
                         "-1.8",
                         "-inpath", javaCompile.destinationDir.toString(),
                         "-aspectpath", javaCompile.classpath.asPath,
                         "-d", javaCompile.destinationDir.toString(),
                         "-classpath", javaCompile.classpath.asPath,
                         "-bootclasspath", project.android.bootClasspath.join(File.pathSeparator)]
        log.debug "ajc args: " + Arrays.toString(args)

        MessageHandler handler = new MessageHandler(true);
        new Main().run(args, handler);
        for (IMessage message : handler.getMessages(null, true)) {
            switch (message.getKind()) {
                case IMessage.ABORT:
                case IMessage.ERROR:
                case IMessage.FAIL:
                    log.error message.message, message.thrown
                    break;
                case IMessage.WARNING:
                    log.warn message.message, message.thrown
                    break;
                case IMessage.INFO:
                    log.info message.message, message.thrown
                    break;
                case IMessage.DEBUG:
                    log.debug message.message, message.thrown
                    break;
            }
        }
    }
}

以上只能在Java项目下有效,Kotlin下无效。

需要用沪江的开源方案。
https://blog.csdn.net/EthanCo/article/details/87938487

相关文章

  • 面向切面思想

    AspectJ使用 程序源码地址:https://github.com/Hujunjob/Architecture...

  • Spring AOP(面向切面编程)

    AOP 即 Aspect Oriented Program 面向切面编程。首先,在面向切面编程的思想里面,把功能分...

  • aop面向切面思想

    你问什么是aop,别人都只是说是面向切面编程,一脸懵逼。 看了很多文章,很多说到把业务流程中无关的东西独立出来,也...

  • 面向切面思想(AOP)

    在iOS开发中我们都一般会继承一个父类控制器,那么如果在迁移子类控制器的同时就要将父类控制器也迁移出去。这就造成耦...

  • AOP 学习笔记-总括

    概述 AOP(Aspect Orient Programming,面向切面),作为OOP(面向对象编程思想)的补充...

  • Spring aop 开篇(1)2018-08-12

    AOP(Aspect Oriented Programming):面向切面编程核心思想:动态的添加和删除切面上的逻...

  • AspectJ在Android中的使用

    一、AOP 全称“Aspect Oriented Programming”,面向切面编程,由于面向对象的思想要求高...

  • aop面向切面编程之AspectJ的简单应用

    面向切面 面向切面AOP(Aspect Oriented Programming),即面向切面编程, 是一种面向切...

  • Python面向对象1

    Python支持多种编程方式:面向过程,面向对象,面向切面(装饰器部分)等 OOP思想 面向对象的基本哲学:世界是...

  • 编程思想-面向切面编程

    1.什么是面向切面编程 AOP(Aspect-Oriented Programming),面向切面编程,看着是跟O...

网友评论

      本文标题:面向切面思想

      本文链接:https://www.haomeiwen.com/subject/zivhwctx.html