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编译器)来编译和编织你的代码。

目录
相关文章
|
19天前
|
Java
Java中的抽象类:深入了解抽象类的概念和用法
Java中的抽象类是一种不能实例化的特殊类,常作为其他类的父类模板,定义子类行为和属性。抽象类包含抽象方法(无实现)和非抽象方法。定义抽象类用`abstract`关键字,子类继承并实现抽象方法。抽象类适用于定义通用模板、复用代码和强制子类实现特定方法。优点是提供抽象模板和代码复用,缺点是限制继承灵活性和增加类复杂性。与接口相比,抽象类可包含成员变量和单继承。使用时注意设计合理的抽象类结构,谨慎使用抽象方法,并遵循命名规范。抽象类是提高代码质量的重要工具。
33 1
|
1月前
|
前端开发 Java
java中的Queue队列的用法
java中的Queue队列的用法
19 1
|
4月前
|
Java
【零基础学Java】—final关键字与四种用法(二十九)
【零基础学Java】—final关键字与四种用法(二十九)
|
8天前
|
JSON Java 数据格式
Java QueryWrapper基本用法
Java QueryWrapper基本用法
13 2
|
1月前
|
安全 Java 开发者
Java 8 `Optional` 类的用法和优势
【2月更文挑战第15天】
13 0
|
2月前
|
Java
|
2月前
|
存储 传感器 机器学习/深度学习
Java数组全套深入探究——进阶知识阶段6、三维数组以及更多维度数组的概念和用法
Java数组全套深入探究——进阶知识阶段6、三维数组以及更多维度数组的概念和用法
46 0
|
3月前
|
Java
java8 foreach用法list转map、map转list
java8 foreach用法list转map、map转list
|
4月前
|
Java Spring
java Proxy 解析---spring aop
java Proxy 解析---spring aop
27 0