修改IDEA编译器,让Ajc与Javac一起编译项目,各司其职

如果项目中使用了AspectJ的语法,则需要将对应的模块设置成Ajc编译器

 

而最理想的方式是让javac去编译java模块,ajc去编译AspectJ代码的模块,下面是IDEA中的配置方法

1、首先下载AspectJ,虽然InteliJ IDEA 集成了 Ajc编译器,但是建议使用自己安装的版本

https://www.eclipse.org/aspectj/downloads.php#stable_release

2、启动windows Dos 命令行窗口,进入到下载好的jar包的目录,运行  java -jar aspectj-1.9.0.jar(此处填写下载好的jar包名称)

3、安装好aspectJ 之后,配置环境变量

新建ASPECTJ_HOME,然后在path变量最前方添加 %ASPECTJ_HOME%\bin

同时在CLASSPATH中添加%ASPECTJ_HOME%\lib\aspectjrt.jar

在命令行中任意目录,输入 ajc -version,查看配置是否生效

4、在IDEA中选择  file->Settings->Build, Execution, Deployment->Compiler->java Compiler  将 use compiler 选择为Ajc

并且勾选Delegate to Javac

5、为需要使用Ajc编译器编译的模块添加Facets

选中需要Ajc编译的模块

7、在Module中删除Facets即可

AOP的ajc增强是通过AspectJ编译器ajc)实现的,具体实现流程如下: 1. 定义切面类 在AspectJ中,切面类是指包含切入点和通知的类。程序员可以使用AspectJ提供的注解或AspectJ语言(AJ)来定义切面类。例如,下面是一个使用AspectJ注解定义的切面类: ``` @Aspect public class MyAspect { @Before("execution(* com.example.demo.service.*.*(..))") public void beforeService() { System.out.println("Before service method is invoked."); } } ``` 上面的切面类定义了一个@Before通知,它会在com.example.demo.service包下的所有方法执行前执行,并输出一条日志。 2. 编译切面类 在编译切面类时,需要使用AspectJ编译器ajc)来将切面类编译为Java字节码。AspectJ编译器会在字节码中添加额外的逻辑,实现切面的织入。例如,可以使用以下命令来编译切面类: ``` ajc -classpath aspectjrt.jar MyAspect.java ``` 上面的命令将使用aspectjrt.jar作为依赖库,编译MyAspect.java文件。 3. 编译目标类 在编译目标类时,需要使用AspectJ编译器ajc)来将切面类和目标类一起编译为Java字节码。AspectJ编译器会在目标类的字节码中添加额外的逻辑,实现切面的织入。例如,可以使用以下命令来编译目标类: ``` ajc -classpath aspectjrt.jar MyAspect.java TargetClass.java ``` 上面的命令将使用aspectjrt.jar作为依赖库,同时编译MyAspect.java文件和TargetClass.java文件。 4. 运行目标类 在运行目标类时,Java虚拟机会加载切面类和目标类的字节码,并执行相应的方法。在方法执行前后,切面类中定义的通知会被自动调用,实现切面的织入。 总之,AOP的ajc增强是通过AspectJ编译器实现的,它可以在编译期间将切面代码织入到目标类的字节码中,从而实现切面编程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值