什么是AOP?AspectJ了解一下!
Posted YouYou工作室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是AOP?AspectJ了解一下!相关的知识,希望对你有一定的参考价值。
前言
AOP(Aspect Orient Programming,面向切面编程)作为面向对象编程的一种补充,现在已经成为一种比较成熟的编程思想。在Java领域,我们使用Spring框架,可以快速地定义一个切面,实现AOP编程。其实,Spring在实现AOP,有时候也依赖于AspectJ。今天就跟大家一起学习一下AspectJ。
AspectJ简介
AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。(From 百度百科)
AspectJ入门
注意,以下代码创建的是普通的Java项目,如果使用Maven类型项目,则可能无法实现相关效果!
先看下面代码:
package com.youyoustudio.demo;
public class HelloWorld {
public void sayHello(){
System.out.println("Hello World!");
}
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.sayHello();
}
}
没错,程序运行结果是输出:Hello World!
现在需求来了,假设我们要实现在sayHello()方法执行前,要打开数据连接,sayHello()方法结束后,需要执行关闭数据库连接,并释放资源的操作,该怎么办呢?这个时候,我们就可以使用AOP编程。下面我们通过AspectJ来简单实现一下。
1. 下载AspectJ
进入官网:https://www.eclipse.org/aspectj/
在右边,点击右侧Download,进入下载页面:
下载完,其实就是一个jar文件。
2. 安装AspectJ
在终端中,使用cd命令切换到AspectJ.jar所在文件夹,然后执行
java -jar aspectj-1.9.2.jar 命令,就可以打开AspectJ的安装界面。安装非常简单,一路Next。
安装完毕后,注意记住安装路径,后面会用到。
3. 添加环境变量
sudo vi ~/.bash_profile
在新窗口中,添加CLASSPATH以及PATH并保存。
export CLASSPATH=$CLASSPATH:/User/***/aspectj1.9/lib/aspectjrt.jar
export PATH=$PATH:/Users/***/aspectj1.9/bin
执行以下命令,使配置生效:
source ~/.bash_profile
执行以下命令验证安装是否有效:
ajc
在IDEA IDE中配置AspectJ
在IDEA中,默认是无法创建AspectJ文件,要能够添加此类文件,需要做如下操作。
① 需要AspectJ Support 和Spring AOP/@AspectJ 这两个插件
打开Idea Preference
转到Plugins选项,查看是否勾选了上述两个插件。如果没有勾选,则勾上。
② 添加aspectjrt.jar引用
右键项目,选择Open Module Settings,打开Module设置,并在Dependencies(依赖)里边,添加aspectjrt.jar引用:
完成上述两步步骤后,就可以添加AspectJ文件了:
接下来,我们创建一个aspect文件,代码如下:
package com.youyoustudio.demo;
public aspect TxHelloWorld {
void around():call(void sayHello()){
System.out.println("打开数据库连接");
proceed();
System.out.println("关闭数据库连接");
}
}
我们直接使用右键,运行我们现在的项目,是无法实现AOP效果的。即:在打印HelloWorld前后,不会打印任何文字。
原因:Java项目,默认使用的是JavaC命令来编译程序的,它无法识别aspect文件,不会去编译它。我们要实现AOP效果,需要我们刚才安装的AspectJ来编译我们的项目。
打开Idea的preferences,【Build,Execution,Deployment】--【Compiler】--【Java Compiler】,将编译器设置为Ajc,并将Path to Ajc Compiler设置为aspectjtools.jar:
我们再次执行程序,就能得到我们想要的结果。
注意:有时候会出现还是跟之前一样的效果,原因就是out文件夹已经存在,编译器没有重新编译。需要将out文件夹删除!
以上是关于什么是AOP?AspectJ了解一下!的主要内容,如果未能解决你的问题,请参考以下文章