什么是AOP?AspectJ了解一下!
  • 分类:Java技术
  • 发表:2019-03-10
  • 围观(3,197)

前言

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

  1. 在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文件夹删除!


扫描关注,及时获取最新消息!

转载本站文章,请注明出处:呦呦工作室

Top