千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 深入剖析org.aspectj

深入剖析org.aspectj

来源:千锋教育
发布人:xqq
时间: 2023-11-24 11:16:31 1700795791

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时会有所帮助。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT