一、java aspectj
java aspectj是什么,让我们一起了解一下?
AspectJ是一个基于Java语言的AOP框架,提供了强大的AOP功能,扩展了Java语言,它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。
为什么aspectj类型间声明很重要?
AspectJ的类型间声明指的是那些跨越类和它们的等级结构的声明。考虑一下,Java语言中如何向一个一些的类中加入新方法,这需要实现一个特定接口,所有类都必须在各自内部实现接口声明的方法,而使用AspectJ则可以将这些工作利用类型间声明放在一个方面中。这个方面声明方法和字段,然后将它们与需要的类联系。
假设我们想有一个Sreen对象观察Point对象的变化,当Point是一个存在的类。我们可以通过书写一个方面,由这个方面声明Point对象有一个实例字段observers,用来保存所有观察Point对象的Screen对象的引用,从而实现这个功能。
Aspect PointObserving{ Private Collection Point.observers=new ArrayList();……} observers字段是私有字段,只有PointObserving能使用。因此,要在aspect中加入方法管理observers聚集。 Aspect PointObserving{ Private Collection Point.observers=new ArrayList(); Public static void addObserver(Point p,Screen s){ p.observers.add(s);} public static void removeObserver(Point p,Screen s){ p.observers.remove(s);}……}
那么如何使用AspectJ?
模拟一个普通程序:服务类UserService: public class UserService{ public int addUser(){ System.out.println("模拟添加用户的方法。"); return 20; } public void validateLogin(){ System.out.println("验证用户登录。"); }}服务类BookServce: public class BookService{ public int addBook(String name,int price){ System.out.println("正在添加图书,书名是:"+name+",价格是:"+price); return 100; }}
二、java spring@AspectJ的作用
AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。
AspectJ(也就是AOP)的动机是发现那些使用传统的编程方法无法很好处理的问题。考虑一个要在某些应用中实施安全策略的问题。
安全性是贯穿于系统所有模块间的问题,每个模块都需要应用安全机制才能保证整个系统的安全性,很明显这里的安全策略的实施问题就是一个横切关注点,使用传统的编程解决此问题非常的困难而且容易产生差错,这就正是AOP发挥作用的时候了。
@AspectJ使用了Java5的注解,可以将切面声明为普通的Java类。
三、IntelliJ IDEA中AspectJ插件的安装及使用
AspectJ是AOP的一种实现技术,IntelliJ IDEA是一款集成开发工具。在使用IntelliJ IDEA编写AspectJ代码之前需要本机先安装AspectJ,具体的安装步骤可以参考我的其他文章。AspectJ的功能类似于拦截器,这是一种切面技术,我们可以使用AspectJ切入满足切点规则的所有方法,并在方法的执行前后加一些通用的处理,下面跟着我一起去学习吧。
工具/材料IntelliJ IDEA
首先我们打开IntelliJ IDEA开发工具,在菜单栏点击File-->Settings-->Plungins,进入到插件管理的页面。接下来我们在右侧的搜索框输入Aspect查询,下图在输入到Asp时便会模糊查询出结果,我们将AspectJ Support和Spring AOP/@AspectJ后面的方框勾选上即可。
接下来我们按住Ctrl+Shift+Alt+S,或者点击下图中所示的图标进入到Project Structure页面,点击Project Settings下方的Libraries,然后点击"+"号,最后选择Java,在接下来弹出的页面中选择aspectjrt.jar这个jar包。
接下来再回到Project Structure下方的Libraries设置,选择需要应用AspectJ的工程,然后点击“OK”按钮即可。
接下来进入到真正使用的部分了,我们首先创建一个Aspect切面,类似于创建一个类。在IntelliJ IDEA的菜单中点击“New”,新建一个Aspect。我们给这个切面取个名字MyAspectJ,注意下方的kind类别是Aspect,这里生成的aspectJ文件是.aj后缀的,而不是.class后缀的,这一点希望大家注意。
生成的aspectJ文件是.aj后缀的,所以原来的编译工具javac便不能使用了,因此我们需要修改编译工具。菜单栏点击File-->Settings-->搜索Compile,结构为Build,Execution,Deployment-->Compiler-->Java Compiler。我们右侧将Use Compiler修改为Ajc,在Path to Ajc compiler中选择安装目录下的aspectjtools.jar。
以上编译工具也设置完了,我们开始编写代码了。首先我们写一个入门的HelloWorld类,该类中有一个需要被AspectJ切面拦截的方法sayHello(),还有一个main方法用于执行程序。
然后我们再完善上面创建的MyAspectJ,创建pointcut切点,注意该写法是aspectJ特有的语法。pointcut表示定义的是一个切点,logPointCut()是切点的名字,call()里面是需要拦截的,*标识返回值是任意类型,然后是类名.方法名(),..表示任意类型的参数。我们定义before()和after()这两个前置和后置拦截,分别用于在别拦截方法的前后执行。
最后在HelloWorld类执行main方法启动程序,我们看一下执行的结果,可以看到在sayHello()方法的执行前后分别执行了拦截。
特别提示.aj后缀的文件必须要使用Ajc的编译器,javac不可以编译。
四、org.aspectj.lang 哪个包
org.aspectj.lang是AspectJ的包。
AspectJ使用 org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强,则使用 org.aspectj.lang.ProceedingJoinPoint表示连接点对象,ProceedingJoinPoint类是 JoinPoint的子接口。
缺少jar包。自己一个一个的导入了一下就好了。
<dependency>
<groupId> org.aspectj</groupId>
<artifactId> aspectjweaver</artifactId>
<version> 1.8.7</version>
</dependency>
AspectJ:
AspectJ(也就是AOP)的动机是发现那些使用传统的编程方法无法很好处理的问题。考虑一个要在某些应用中实施安全策略的问题。
安全性是贯穿于系统所有模块间的问题,每个模块都需要应用安全机制才能保证整个系统的安全性,很明显这里的安全策略的实施问题就是一个横切关注点,使用传统的编程解决此问题非常的困难而且容易产生差错,这就正是AOP发挥作用的时候了。@AspectJ使用了Java5的注解,可以将切面声明为普通的Java类。
AspectJ使用的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java spring@AspectJ的作用、AspectJ使用的信息别忘了在本站进行查找哦。