在Mac上安装Aspectj1.9.8(用于Java17)+IDEA

news2024/9/22 11:37:39

1. 确定所使用的Java版本和AspectJ的对应关系

2. 下载AspectJ包

3. 安装AspectJ

4. 添加AspectJ对应的环境变量

5. AspectJ测试-简单终端测试

6. AspectJ测试-通过IDEA敲代码测试

---------------------------------------详细教程---------------------------------------

1. 确定所使用的Java版本和AspectJ的对应关系

AspectJ版本和Java版本的兼容性对应图(Aspects and Java version cpmpatibility)
AspectJ版本和Java版本的兼容性对应图(Aspects and Java version cpmpatibility)

上图来源于AspectJ和Java版本的兼容性列表(来源于aspect的官方github) 

2. 下载AspectJ包

!!!自己找到所需要版本的AspectJ并下载即可。(本人使用的是Java17版本,所以是对应安装AspectJ 1.9.8)

下载链接1: AspectJ下载链接【来源于Eclipse】

下载链接2: AspectJ下载链接【来源于Github】

3. 安装AspectJ

        3.1 直接打开AspectJ的下载路径文件夹,双击进行安装。不出意外的话,mac系统应该会提示macOS无法验证此App是否包含恶意软件

        

mac软件安装安全提示

        3.2 这时候打开 系统设置-隐私与安全性,选择安全性下的仍要打开进行安装;

系统设置-隐私与安全性-安全性-点击仍要打开

         3.3 经过3.2步骤后,会自动弹出AspectJ的安装窗口,以下开始正式安装:

AspectJ安装界面1-介绍信息-点Next
AspectJ安装界面2-Java安装路径确认-没问题点Next(AspectJ会自动搜索Java安装路径,没找对的话可以自己修改)

AspectJ安装界面3-AspectJ安装路径确认-没问题点Install

AspectJ安装界面4-AspectJ安装完成
AspectJ安装界面5-AspectJ帮助信息提示
其中,第1条提示的粗体黑色路径所指示的文件一般是用于添加到自己的java项目中;
第2条提示的粗体黑色路径是用于该路径添加到自己的环境变量中(如~/.bash_profile);
最下面那条黑色粗体路径是AspectJ的README,有需要可以自己看看

4. 添加AspectJ对应的环境变量

        4.1 打开mac的terminal终端,输入

sudo vi ~/.bash_profile

        4.2 将光标用“键盘下键”移动到文件最下面一行,然后点击“键盘i键”进行输入,参考自己AspectJ的安装路径bin路径,本人路径为:

export PATH=$PATH:/Users/xxxxx/aspectj1.9/bin

        4.3 点击“键盘esc键”退出vi编辑模式,并输入:wq保存文件并退出vi;

        4.4 在终端输入以下指令,以更新环境变量配置。

source ~/.bash_profile

5. AspectJ测试-简单终端测试

        5.1 简单终端(命令行)测试安装是否成功,没有提示指令无法识别即安装AspectJ成功;

ajc
ajc指令测试-输入ajc指令后出现如图所示即AspectJ安装成功

6. AspectJ测试-通过IDEA敲代码测试

        6.1 在IDEA中创建一个Java的Maven工程(此时笔者直接创建JavaWeb的Spring Web项目模版进行测试)依次在IDEA中点击File-New-Project;

Java的Maven创建过程1-输入项目相关信息
Java的Maven创建过程2-勾选Spring web支持

        6.2 在IDEA设置中Plugins添加AspectJ扩展,依次打开IntelliJ IDEA-Settings-Plugins,在搜索框输入aspect并进行搜索,点击安装AspectJ扩展(即下图红框那个扩展)。

在IDEA中添加对应Plugins-搜索Aspect并进行下载安装
在IDEA中添加对应Plugins-搜索AspectJ并进行下载安装

        6.3 在项目中分别创建如下图所示的MyAspect.java和MyService.java文件,修改A10Application.java文件,并创建lib文件夹;

        MyAspect.java文件如下:

// MyAspect.java
package com.itheima.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect // 注意此切面并未被Spring管理
public class MyAspect {

    @Before("execution(* com.itheima.service.MyService.foo())")
    public void before(){
        System.out.println("before()");
    }
}


MyService.java文件如下:

// MyService.java
package com.itheima.service;

import org.springframework.stereotype.Service;

@Service
public class MyService {

    public void foo(){
        System.out.println("foo()");
    }
}

A10Application.java文件如下:

// A10Application.java
package com.itheima;

import com.itheima.service.MyService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;


/*
    使用aspectj进行增强
 */
@SpringBootApplication
public class A10Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(A10Application1.class, args);
        MyService service = context.getBean(MyService.class);

        System.out.println("service class: " + service.getClass());;
        service.foo();

        context.close();
    }
}

 项目结构如下:

项目结构-红圈内是需要创建的代码或文件夹

         6.4 将自己项目中aspectjrt.jar添加到项目jar包。在AspectJ安装目录下寻找aspectjrt.jar文件(其参考路径为:你的AspectJ安装路径/lib/aspectjet.jar,笔者aspectjrt.jar文件路径为/Users/xxxxx/aspectj1.9/lib),并将其拷贝到自己项目的lib文件夹

aspectjrt.jar文件拷贝后的项目结构

        

        6.5 设置ajc编译器

在IDEA中设置ajc编译器-红框处要选择Ajc编译器,蓝框处要修改为AspectJ安装路径下的lib文件夹内的aspecttools.jar文件的绝对路径(作为参考,笔者aspecttools.jar文件路径参考为:/User/xxxxx/aspect1.9/lib/aspecttools.jar)

        6.6 运行项目的主Java文件,出现下图所示结果即为AspectJ安装测试通过

程序运行结果-出现红框所示,则表明测试成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度学习】7-0 自制框架实现DeZero - 自动微分

介绍下处理深度学习的框架DeZero,通过这个框架来了解自动微分是如何实现的 自动微分指的是自动求出导数的做法(技术)。“自动求出导数”是指由计算机(而非人)求出导数。具体来说,它是指在对某个计算(函数)编码后计算机会自动求出该计算的导数的系统。 自…

flexible.js适配pc端、移动端并自动将px转换rem

首先在assets中创建一个flexible.js文件 ;(function(win, lib) {let doc win.document;let docEl doc.documentElement;let metaEl doc.querySelector(meta[name"viewport"]);let flexibleEl doc.querySelector(meta[name"flexible"]);let dpr 0;let…

POI及EasyExcel操作xls,xlsx文件

Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目。 可以使用 Java 读写 MS Excel 文件,可以使用 Java 读写 MS Word 和 MS PowerPoint 文件。 模…

C# 标注图片

画矩形 画四边形 保存标注图片 保存标注信息 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Ima…

【UE5 Cesium】06-Cesium for Unreal 从一个地点飞行到另一个地点(上)

UE版本:5.1 介绍 本文以在墨尔本和悉尼这两个城市间为例,介绍如何使用虚幻5引擎和Cesium for Unreal插件在这两个城市间进行飞行移动,其中墨尔本和悉尼城市的倾斜摄影是Cesium官方仓库中自带的资产,我们引入到自己的Cesium账号…

蓝桥杯专题-试题版-【地宫取宝】【斐波那契】【波动数列】【小朋友排队】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

MySQL相关知识点

这里写目录标题 MySQL简介概述配置安装连接(企业级)数据模型sql语句简介语法分类 数据库设计DDL(SQL语句)数据库操作idea集成mysql开发图形化工具(直接在空java项目里打开mysql数据库) 表(对表的…

ASEMI代理ST可控硅BTA41封装,BTA41图片

编辑-Z BTA41参数描述: 型号:BTA41 封装:TO-3P RMS导通电流IT(RMS):40A 非重复浪涌峰值导通电流ITSM:420A 峰值栅极电流IGM:8A 平均栅极功耗PG:1W 存储接点温度范围Tstg:-40…

kubelete源码阅读

kubelet 是运行在每个节点上的主要的“节点代理”,每个节点都会启动 kubelet进程,用来处理 Master 节点下发到本节点的任务,按照 PodSpec 描述来管理Pod 和其中的容器(PodSpec 是用来描述一个 pod 的 YAML 或者 JSON 对象&#xf…

ATTCK(四)之ATTCK矩阵战术技术(TTP)逻辑和使用

ATT&CK矩阵战术&技术(TTP)逻辑和使用 ATT&CK的战术与技术组织结构 ATT&CK矩阵中的所有战术和技术,都可以通过以下链接进行目录结构式的浏览https://attack.mitre.org/techniques/enterprise/,也可以在矩阵里直接…

arcgis栅格影像--镶嵌

1、打开软件导入数据,如下: 2、在搜索栏中搜索“镶嵌至新栅格”,如下: 3、双击打开镶嵌对话框,如下: 4、点击确定按钮,进行栅格镶嵌,镶嵌结果如下: 5、去除黑边&#xff…

若依框架-前端使用教程

1 使用 npm run dev 命令执行本机开发测试时,提出错误信息如下: opensslErrorStack: [ error:03000086:digital envelope routines::initialization error ], library: digital envelope routines, reason: unsupported, code: ERR_OSSL_EVP_UNS…

Web安全——PHP基础

PHP基础 一、PHP简述二、基本语法格式三、数据类型、常量以及字符串四、运算符五、控制语句1、条件控制语句2、循环控制语句 六、php数组1、数组的声明2、数组的操作2.1 数组的合拼2.2 填加数组元素2.3 添加到指定位置2.4 删除某一个元素2.5 unset 销毁指定的元素2.6 修改数组中…

Tune-A-Video:用于文本到视频生成的图像扩散模型的One-shot Tuning

Tune-A-Video: One-Shot Tuning of Image Diffusion Models for Text-to-Video Generation Project:https://tuneavideo.github.io 原文链接:Tnue-A-Video:用于文本到视频生成的图像扩散模型的One-shot Tuning (by 小样本视觉与智能前沿&…

基于matlab使用校准相机测量平面物体(附源码)

一、前言 此示例演示如何使用单个校准相机以世界单位测量硬币的直径。 此示例演示如何校准相机,然后使用它来测量平面对象(如硬币)的大小。这种方法的一个示例应用是测量传送带上的零件以进行质量控制。 二、校准相机 相机校准是估计镜头…

基于多站点集中汇聚需求的远程调用直播视频汇聚平台解决方案

一、行业背景 随着视频汇聚需求的不断提升,智慧校园、智慧园区等项目中需要将各分支机构的视频统一汇聚到总部,进行统一管控,要满足在监控内部局域网、互联网、VPN网络等TCP/IP环境下,为用户提供低成本、高扩展、强兼容、高性能的…

ModaHub魔搭社区:如何基于向量数据库+LLM(大语言模型),打造更懂你的企业专属Chatbot?

目录 1、为什么Chatbot需要大语言模型向量数据库? 2、什么是向量数据库? 3、LLM大语言模型ADB-PG:打造企业专属Chatbot 4、ADB-PG:内置向量检索全文检索的一站式企业知识数据库 5、总结 1、为什么Chatbot需要大语言模型向量数据库? 这个春天,最让人震感的科技产品莫过…

6.28作业

作业1 结构体不能被继承,类可以被继承结构体默认的都是公共,类默认是私有的 转载【结构体和类的区别】 结构体是值类型,类是引用类型 结构体存在栈中,类存在堆中 结构体成员不能使用protected访问修饰符,而类可以 结…

vsCode 运行 报错信息 yarn : 无法加载文件 C:\Program Files\nodejs\yarn.ps1

检索说是 PowerShell 执行策略,默认设置是Restricted不去加载配置文件或运行脚本。需要去做相应的变更, 修改配置为 RemoteSigned 管理员身份打开 PowerShell,执行命令,修改PowerShell 执行策略 set-ExecutionPolicy RemoteSigne…

2023.6.28

类和结构体区别&#xff1a; 1&#xff0c;类可以进行封装&#xff08;有访问权限等&#xff09;&#xff0c;结构体无&#xff1b; 2&#xff0c;类有&#xff1a;封装&#xff0c;继承&#xff0c;多态三大特征&#xff0c;结构体只有变量和函数。 #include <iostream&g…