SpringAOP:AspectJ环境的搭建及用法

来源:互联网 发布:ps软件百度云 编辑:程序博客网 时间:2024/06/06 12:47

之前在搭配AspectJ环境和运行第一个AspectJ程序时,一直报错,在网上找运行AspectJ的具体步骤也没找到,本篇博文总结AspectJ的下载,环境搭配以及第一个程序的运行。

首先为什么要用AspectJ,或者说AspectJ有什么价值(来源于网络)

在传统 OOP 编程里以对象为核心,整个软件系统由系列相互依赖的对象所组成,而这些对象将被抽象成一个一个的类,并允许使用类继承来管理类与类之间一般到特殊的关系。随着软件规模的增大,应用的逐渐升级,慢慢出现了一些 OOP 很难解决的问题。

我们可以通过分析、抽象出一系列具有一定属性与行为的对象,并通过这些对象之间的协作来形成一个完整的软件功能。由于对象可以继承,因此我们可以把具有相同功能或相同特性的属性抽象到一个层次分明的类结构体系中。随着软件规范的不断扩大,专业化分工越来越系列,以及 OOP 应用实践的不断增多,随之也暴露出了一些 OOP 无法很好解决的问题。

现在假设系统中有 3 段完全相似的代码,这些代码通常会采用“复制”、“粘贴”方式来完成,通过这种“复制”、“粘贴”方式开发出来的软件如图 1 所示。

图 1.多个地方包含相同代码的软件

图 1 多个地方包含相同代码的软件

看到如图 1 所示的示意图,可能有的读者已经发现了这种做法的不足之处:如果有一天,图 1 中的深色代码段需要修改,那是不是要打开 3 个地方的代码进行修改?如果不是 3 个地方包含这段代码,而是 100 个地方,甚至是 1000 个地方包含这段代码段,那会是什么后果?

为了解决这个问题,我们通常会采用将如图 1 所示的深色代码部分定义成一个方法,然后在 3 个代码段中分别调用该方法即可。在这种方式下,软件系统的结构如图 2 所示。

图 2 通过方法调用实现系统功能

图 2 通过方法调用实现系统功能

对于如图 2 所示的软件系统,如果需要修改深色部分的代码,只要修改一个地方即可,不管整个系统中有多少地方调用了该方法,程序无须修改这些地方,只需修改被调用的方法即可——通过这种方式,大大降低了软件后期维护的复杂度。

对于如图 2 所示的方法 1、方法 2、方法 3 依然需要显式调用深色方法,这样做能够解决大部分应用场景。但对于一些更特殊的情况:应用需要方法 1、方法 2、方法 3 彻底与深色方法分离——方法 1、方法 2、方法 3 无须直接调用深色方法,那如何解决?

因为软件系统需求变更是很频繁的事情,系统前期设计方法 1、方法 2、方法 3 时只实现了核心业务功能,过了一段时间,我们需要为方法 1、方法 2、方法 3 都增加事务控制;又过了一段时间,客户提出方法 1、方法 2、方法 3 需要进行用户合法性验证,只有合法的用户才能执行这些方法;又过了一段时间,客户又提出方法 1、方法 2、方法 3 应该增加日志记录;又过了一段时间,客户又提出……面对这样的情况,我们怎么办?通常有两种做法:

根据需求说明书,直接拒绝客户要求。拥抱需求,满足客户的需求。

第一种做法显然不好,客户是上帝,我们应该尽量满足客户的需求。通常会采用第二种做法,那如何解决呢?是不是每次先定义一个新方法,然后修改方法 1、方法 2、方法 3,增加调用新方法?这样做的工作量也不小啊!我们希望有一种特殊的方法:我们只要定义该方法,无须在方法 1、方法 2、方法 3 中显式调用它,系统会“自动”执行该特殊方法。

上面想法听起来很神奇,甚至有一些不切实际,但其实是完全可以实现的,实现这个需求的技术就是 AOP。AOP 专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,在 Java EE 应用中,常常通过 AOP 来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP 已经成为一种非常常用的解决方案。


一、下载Aspectj以及AJDT

1:Aspectj可以直接去官网下载,或者在此链接下载,来源官方下载,放心使用:

http://download.csdn.net/detail/vipmao/9553778

下载完成后会得到一个aspectj-1.8.9.jar文件,然后启动命令窗口进入jar文件所在路径,输入:java- jar aspectj -1.8.9.jar进行安装。

安装后还应该将bin文件夹所在路径添加到PATH环境变量中,将lib文件夹下的aspectjrt.jar添加到CLASSPATH环境变量中,具体如何添加环境变量自行百度。

2:AJDT是一个eclipse插件,开发aspectj必装,他可以提供语法检查,以及编译。

去官网根据自己Eclipse版本下载相应的AJDT插件,或者直接在此链接下载,来源官方网站,放心使用。

http://download.csdn.net/detail/vipmao/9554310

关于插件安装的几种方式可以参考:

http://blog.csdn.net/vipmao/article/details/51242558

二、创建项目

1:创建项目

安装完AJDT插件后,咱们就可以创建Aspectj项目了,创建项目的时候,我们选择New--->Aspectj Project当然,你也可以选择先创建一个普通的Java项目(包括JavaEE项目),然后选中project,右键---->Configure-->convert to aspectj Project。 其实无论那种方式,无非都是为了:使用apsectj的编译器去编译代码,而不用JDk。



创建成功之后咱们可以在咱们的项目上看见AJ的标志,这就说明这个项目类型是AspectJ。

2:创建测试类 Test.java

package com.mao.aspectJQS;public class Test {public static void main(String[]args){System.out.println("查询所有美女联系方式");}}</span>
然后我们期望在查询美女联系方式之前有一个权限验证操作,并不是所有人都可以随便查,那就需要我们的AspectJ了

3:创建spectj,命名为:AuthAspect.aj

这里千万别习惯性就New --->Class了~切记,之前博主一直就是创建的Class,写的aspectj内容,一直报错。

接下来我们编写这个aspect的内容。

package com.mao.aspectJQS;public aspect AuthAspect{// 指定在执行org.crazyit.app.service包中任意类的、任意方法之前执行下面代码块// 第一个星号表示返回值不限;第二个星号表示类名不限;// 第三个星号表示方法名不限;圆括号中..代表任意个数、类型不限的形参before(): execution(* com.mao.aspectJQS.*.*(..)){System.out.println("模拟进行权限检查...");}}

4:运行测试类Test.java 

运行结果:




0 0
原创粉丝点击