java aspectjrt AOP 用法

简介: java aspectjrt AOP 用法

AspectJ是一个用于Java语言的面向切面编程(AOP)的框架。以下是在Java项目中使用AspectJ的基本步骤:

  1. 添加依赖:
  • 如果你使用Maven,你可以在pom.xml文件中添加以下依赖:
  • xml
<dependencies>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.9.9</version> <!-- 或者使用你需要的版本号 -->
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjtools</artifactId>
        <version>1.9.9</version> <!-- 或者使用你需要的版本号 -->
    </dependency>
</dependencies>
如果你使用Gradle,你可以在build.gradle文件中添加以下依赖:
groovy
dependencies {
    implementation 'org.aspectj:aspectjrt:1.9.9' // 或者使用你需要的版本号
    implementation 'org.aspectj:aspectjtools:1.9.9' // 或者使用你需要的版本号
}
  1. 编写切面(Aspect): 创建一个Java类,例如 MyAspect.java,并在其中定义切点(pointcut)和通知(advice)。例如:
  2. java
@Aspect
public class MyAspect {
    @Pointcut("execution(* com.example.myapp.service.*.*(..))")
    public void businessService() {} // 切点定义
    @Before("businessService()")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("Executing: " + joinPoint.getSignature().getName());
    }
    @AfterReturning(pointcut = "businessService()", returning = "result")
    public void logAfterReturning(Object result) {
        System.out.println("Method executed with result: " + result);
    }
}
  1. 在这个例子中,我们定义了一个切点,该切点匹配 com.example.myapp.service 包下的所有方法。然后我们定义了两个通知:一个在方法执行前打印日志,另一个在方法成功返回后打印结果。
  2. 配置编译和编织(Weaving):
  • 如果你使用Maven,你可以在pom.xml中添加AspectJ的maven插件来自动处理编织:
  • xml
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.14.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <Xlint>ignore</Xlint>
                <complianceLevel>1.8</complianceLevel>
                <showWeaveInfo>true</showWeaveInfo>
                <weaveDependencies>
                    <weaveDependency>
                        <groupId>com.example.myapp</groupId>
                        <artifactId>myapp-service</artifactId>
                    </weaveDependency>
                </weaveDependencies>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
如果你使用Gradle,你可以在build.gradle中添加AspectJ的gradle插件来自动处理编织:
groovy
apply plugin: 'java'
apply plugin: ' aspectj'
repositories {
    mavenCentral()
}
dependencies {
    // ... (你的其他依赖)
    implementation 'org.aspectj:aspectjrt:1.9.9'
    implementation 'org.aspectj:aspectjtools:1.9.9'
}
compileJava {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    options.compilerArgs += [
        '-XDignore.symbol.file',
        '-Xlint:ignore',
        '- Aj.aspectPaths': configurations.compileClasspath.files.asType(List<String>)
    ]
    doLast {
        copy {
            from jar
            into "$buildDir/libs/"
        }
    }
}
dependencies {
    aspects 'org.aspectj:aspectjweaver:1.9.9'
}
  1. 使用 AspectJ 运行时库: 确保你的项目类路径(classpath)包含了 aspectjrt.jar,这是AspectJ的运行时库,包含执行编织后代码所需的类。
  2. 测试: 编写你的应用程序代码和测试用例,AspectJ的切面将在相应的切点处自动生效。

注意:以上步骤是基于现代构建工具(如Maven和Gradle)的自动化配置。如果你在没有这些工具的环境中工作,你可能需要手动使用 ajc(AspectJ编译器)来编译和编织你的代码。

目录
相关文章
|
4月前
|
Java
Java中的equals()与==的区别与用法
【7月更文挑战第28天】
67 12
|
3月前
|
Java
Java aop 如何获取请求头里的token
【8月更文挑战第13天】Java aop 如何获取请求头里的token
145 0
|
22天前
|
存储 安全 Java
深入理解Java中的FutureTask:用法和原理
【10月更文挑战第28天】`FutureTask` 是 Java 中 `java.util.concurrent` 包下的一个类,实现了 `RunnableFuture` 接口,支持异步计算和结果获取。它可以作为 `Runnable` 被线程执行,同时通过 `Future` 接口获取计算结果。`FutureTask` 可以基于 `Callable` 或 `Runnable` 创建,常用于多线程环境中执行耗时任务,避免阻塞主线程。任务结果可通过 `get` 方法获取,支持阻塞和非阻塞方式。内部使用 AQS 实现同步机制,确保线程安全。
|
9天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
21 0
|
2月前
|
Java
Java 正则表达式高级用法
Java 中的正则表达式是强大的文本处理工具,用于搜索、匹配、替换和分割字符串。`java.util.regex` 包提供了 `Pattern` 和 `Matcher` 类来高效处理正则表达式。本文介绍了高级用法,包括使用 `Pattern` 和 `Matcher` 进行匹配、断言(如正向和负向前瞻/后顾)、捕获组与命名组、替换操作、分割字符串、修饰符(如忽略大小写和多行模式)及 Unicode 支持。通过这些功能,可以高效地处理复杂文本数据。
|
2月前
|
存储 Java 数据处理
Java 数组的高级用法
在 Java 中,数组不仅可以存储同类型的数据,还支持多种高级用法,如多维数组(常用于矩阵)、动态创建数组、克隆数组、使用 `java.util.Arrays` 进行排序和搜索、与集合相互转换、增强 for 循环遍历、匿名数组传递以及利用 `Arrays.equals()` 比较数组内容。这些技巧能提升代码的灵活性和可读性,适用于更复杂的数据处理场景。
|
2月前
|
Java
Java的aop是如何实现的?原理是什么?
Java的aop是如何实现的?原理是什么?
25 4
|
2月前
|
安全 Java
Java switch case隐藏用法
在 Java 中,`switch` 语句是一种多分支选择结构,常用于根据变量值执行不同代码块。除基本用法外,它还有多种进阶技巧,如使用字符串(Java 7 开始支持)、多个 `case` 共享代码块、不使用 `break` 实现 “fall-through”、使用枚举类型、使用表达式(Java 12 及以上)、组合条件以及使用标签等。这些技巧使代码更加简洁、清晰且高效。
|
3月前
|
Java 测试技术 Maven
成功解决:nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
这篇文章介绍了解决Spring框架中出现的`java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource`错误的步骤,指出错误原因是缺少`spring-aop`模块的jar包,并提供了通过Maven依赖或手动添加jar包到项目中的方法来解决这个问题。
成功解决:nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
|
3月前
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
46 2