全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

深入剖析org.aspectj

发布时间:2023-11-24 11:16:31
发布人:xqq

org.aspectj是Java编程语言的一个AOP(面向切面编程)的实现。它是AspectJ工具的一个组成部分,是一个Java语言的扩展,它允许您为Java应用程序中的程序范围添加声明性的、简单、特定的代码。本文将从多个方面对org.aspectj进行详细的阐述。

一、org.aspectj 包

org.aspectj包包含一组AspectJ核心API,它们的目的是为了保持AOP的通用性。其中最重要的两个模块是:aspectjrt.jaraspectjweaver.jar。其中,aspectjrt.jar包含了最基本的AspectJ APIs,包括Runtime支持、基本数据结构等。

    
    
        org.aspectj
        aspectjrt
        1.8.13
    

另一个主要的包就是aspectjweaver.jar,该包包含了一个Java编译器的扩展,可以识别AspectJ的语言扩展与语法,它可以支持在Java代码中嵌入AspectJ的横切关注点。

    
    
        org.aspectj
        aspectjweaver
        1.8.13
        provided
    

二、org.aspectj依赖爆红

org.aspectj的开发需要导入_aspectjrt.jar和_aspectjweaver.jar等多个JAR包。这样就容易造成传统的打包方式(将这些JAR包lib下复制到打包的JAR文件中)时,动态classloader取父ClassLoader中的类而抛出ClassNotFoundException的问题,即导致编译上下文与运行上下文不一致的问题。解决方法是为org.aspectj制作一个FatJAR文件,将所有的依赖项都打包到同一JAR文件中。

    
    
        
            
                org.apache.maven.plugins
                maven-assembly-plugin
                2.6
                
                    posix
                    
                        jar-with-dependencies
                    
                
            
        
    

三、org.aspectj不存在

org.aspectj的开发需要加入相关的插件,但在一些IDE中,org.aspectj插件未被默认加载,需要手动安装。

    
        org.aspectj
        aspectj-maven-plugin
        1.11
        
            
                
                    compile
                    test-compile
                
            
        
    

四、org.aspectj.lang.annotation

org.aspectj.lang.annotation包定义了一组注释,以简单和方便的方式将方面应用于Java类,方法和属性。从功能上来说,在使用Java 5注释的情况下,AspectJ注释分别起到描述性元素(AspectJ定义通知的方法)和元数据元素(Element注解指定元数据)的作用。

下面是一个使用@Aspect注释的简单例子:

import org.aspectj.lang.annotation.*;
import org.aspectj.lang.*;

@Aspect
public class ExampleAspect
{
    @Pointcut("execution(* example.Example.method(..))")
    public void exampleMethod() {}

    @After("exampleMethod()")
    public void intercept() {
        //处理中间代码
    }
}

五、org.aspectj.lang.JoinPoint

org.aspectj.lang.JoinPoint包含有关连接点的信息。连接点是在执行应用程序时AOP切面接收通知的特定点,例如调用构造函数或调用方法。

import org.aspectj.lang.annotation.*;
import org.aspectj.lang.*;

@Aspect
public class ExampleAspect
{
    @Pointcut("execution(* example.Example.method(..))")
    public void exampleMethod() {}

    @After("exampleMethod()")
    public void intercept(JoinPoint jp) {
        //打印连接点相关信息
        System.out.println("Signature: " + jp.getSignature());
        System.out.println("Args: " + Arrays.toString(jp.getArgs()));
        //处理中间代码
    }
}

六、org.aspectj.lang不存在

在使用AspectJ时,如果没有定义真实的pointcuts,那么直接使用@AspectJ注释就会导致问题。在编写代码时,需要确保org.aspectj.lang包可用。

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;

@Aspect
public class ExampleAspect
{
    @Around("execution(* example.Example.method(..))")
    public Object intercept(ProceedingJoinPoint pjp) throws Throwable {
        //处理中间代码

        Object result = pjp.proceed();

        //处理中间代码

        return result;
    }
}

结束语

本文详细介绍了org.aspectj的多个方面,包括其基本API、依赖问题、包和注释等。希望这些信息对于您在使用org.aspectj时会有所帮助。

performance.timing

相关文章

Java@Component详解

Java@Component详解

2023-11-24
深入了解portswitch命令

深入了解portswitch命令

2023-11-24
sqlserver去重的几种方法

sqlserver去重的几种方法

2023-11-24
linux文件所属分区,linux分区文件类型

linux文件所属分区,linux分区文件类型

2023-11-24

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31
在线咨询 免费试学 教程领取