8.4.2 使用AspectJ实现AOP

        AspectJ是一个基于Java语言的AOP框架。Spring 4.0 的AOP对AspectJ很好的集成。

        AspectJ是Java 语言的一个AOP实现,其主要包括两个部分:一个部分定义了如何表达、定义AOP编程中的语法规范,通过这套语法规范,可以方便地用AOP来解决Java语言中存在的交叉关注点 的问题;另一个部分是工具部分,包括编译器、调试工具等。

        1. 下载和安装AspectJ:java -jar aspectj-x.x.x.jar

        2.AspectJ使用入门

          ⊙ bin : 该路径下存放了aj、aj5、ajc、ajdoc、ajbrowser等命令,其中ajc命令最常用,它的作用类似于javac,用于对普通的Java类进行编译时增强。

          ⊙ docs : 该路径下存放了AspectJ的使用说明、参考手册、API文档等文档。

          ⊙ lib : 该路径下的4个JAR文件是AspectJ的核心类库。

          ⊙ 相关授权文件。

          Class : Hello

package edu.pri.lime._8_4_2.service;

public class Hello {

    public void foo(){
System.out.println("执行Hello组件的foo()方法...");
}
public int addUser(String name,String pass){
System.out.println("执行Hello组件的addUser()添加用户 : " + name);
return 20;
}
}

          Class : World

package edu.pri.lime._8_4_2.service;

public class World {

    public void bar(){
System.out.println("执行World组件的bar()方法...");
}
}

          Class : AspectJTest

package edu.pri.lime._8_4_2.service;

public class AspectJTest {

    public static void main(String[] args) {

        Hello hello = new Hello();
hello.foo();
hello.addUser("lime", "7878,");
World world = new World();
world.bar();
}
}

          AspectJ : AuthAspect

package edu.pri.lime._8_4_2.service;

public aspect AuthAspect {

//   在所有业务方法之前执行
//   指定在执行edu.pri.lime._8_4_2.service包中任意类的任意方法之前执行下面代码块
//   * : 返回值不限;* :类名不限; * : 方法名不限;(..) : 任意个数、类型不限的形参

    before() : execution(* edu.pri.lime._8_4_2.service.*.*(..)){

        System.out.println("模拟进行权限检查...");
}
}

          AspectJ : LogAspect

package edu.pri.lime._8_4_2.service;

public aspect LogAspect {

//    定义一个Pointcut,其名为logPointcut
// 该Pointcut代表了后面给出的切入点表达式,这样可复用该切入点表达式
pointcut logPointcut() : execution(* edu.pri.lime._8_4_2.service.*.*(..));
after() : logPointcut(){
System.out.println("模拟记录日志...");
}
}

          AspectJ : TxAspect

package edu.pri.lime._8_4_2.service;

public aspect TxAspect {

//    指定执行Hello.sayHello()方法时执行下面的代码块
Object around():call(* edu.pri.lime._8_4_2.service.*.*(..)){
System.out.println("模拟开启事务...");
// 回调原来的目标方法
Object rvt = proceed();
System.out.println("模拟结束事务...");
return rvt;
}
}

          AOP实现可分为两类(按AOP框架修改源代码的时机)

            ⊙ 静态AOP实现 : AOP框架在编译阶段对程序进行修改,即实现对目标类的增强,生成讲台的AOP代理类(生成的*.class 文件已经被改掉了,需要使用特定的编译器).以AspectJ为代表。

            ⊙ 动态AOP实现 : AOP框架在运行阶段动态生成AOP代理(在内存中以JDK动态代理或cglib动态第生成AOP代理类),以实现对目标对象的增强。以Spring AOP为代表。

          一般来说,静态AOP实现具有较好的性能,但需要使用特殊的编译器。动态AOP实现是纯Java实现,因此无须特殊的编译器,但是通常性能略差。

啦啦啦

啦啦啦

啦啦啦

啦啦啦

啦啦啦

8 -- 深入使用Spring -- 4...2 使用AspectJ实现AOP的更多相关文章

  1. Spring @AspectJ 实现AOP 入门例子(转)

    AOP的作用这里就不再作说明了,下面开始讲解一个很简单的入门级例子. 引用一个猴子偷桃,守护者守护果园抓住猴子的小情节. 1.猴子偷桃类(普通类): package com.samter.common ...

  2. Spring框架(6)---AspectJ实现AOP

    AspectJ实现AOP 上一篇文章Spring框架(4)---AOP讲解铺垫,讲了一些基础AOP理解性的东西,那么这篇文章真正开始讲解AOP 通过AspectJ实现AOP要比普通的实现Aop要方便的 ...

  3. Spring详解(五)------AspectJ 实现AOP

    上一篇博客我们引出了 AOP 的概念,以及 AOP 的具体实现方式.但是为什么要这样实现?以及提出的切入点表达式到底该怎么理解? 这篇博客我们通过对 AspectJ 框架的介绍来详细了解. 1.什么是 ...

  4. Spring详解(六)------AspectJ 实现AOP

    上一篇博客我们引出了 AOP 的概念,以及 AOP 的具体实现方式.但是为什么要这样实现?以及提出的切入点表达式到底该怎么理解? 这篇博客我们通过对 AspectJ 框架的介绍来详细了解. 1.什么是 ...

  5. Spring基于AspectJ的AOP的开发——注解

    源码:https://gitee.com/kszsa/dchart 一, AspectJ的概述: AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法所以它有一个专 ...

  6. Spring整合AspectJ的AOP

    学而时习之,不亦说乎!                              --<论语> 看这一篇之前最好先看前面关于AOP的两篇. http://www.cnblogs.com/z ...

  7. (转)Spring使用AspectJ进行AOP的开发:注解方式

    http://blog.csdn.net/yerenyuan_pku/article/details/69790950 Spring使用AspectJ进行AOP的开发:注解方式 之前我已讲过Sprin ...

  8. Spring 基于 AspectJ 的 AOP 开发

    Spring 基于 AspectJ 的 AOP 开发 在 Spring 的 aop 代理方式中, AspectJ 才是主流. 1. AspectJ 简介 AspectJ 是一个基于 java 语言的 ...

  9. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring使用AspectJ开发AOP基于XML和基于Annotation

    AspectJ 是一个基于 Java 语言的 AOP 框架,它扩展了 Java 语言.Spring 2.0 以后,新增了对 AspectJ 方式的支持,新版本的 Spring 框架,建议使用 Aspe ...

随机推荐

  1. 百度地图Api进阶教程-实例高级操作8.html

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  2. SpringMVC深度探险(三) —— DispatcherServlet与初始化主线

    在上一篇文章中,我们给出了构成SpringMVC应用程序的三要素以及三要素的设计过程.让我们来归纳一下整个设计过程中的一些要点: SpringMVC将Http处理流程抽象为一个又一个处理单元 Spri ...

  3. postgresql远程连接中断的处理

    在网络上连接远程服务器postgresql时,不活动时间稍长就会自动断开连接,不利于操作. 琢磨了一下,服务器上使用以下网络配置时,解决了这个问题.   #man 7 tcp   net.ipv4.t ...

  4. 关于Unity中新版动画系统的使用

    Mecanim动画 1:旧版动画系统只能通过代码来控制动画播放,随着动画种类变多,代码复杂度也会增加,同时动画过渡也需要非常繁琐的代码控制,为了让有经验的动画师开发动画,unity推出了针对人物角色的 ...

  5. 用不上索引的SQL语句

    下面介绍六种建立索引后不起作用的sql语句. 1.使用不等于操作符(<>, !=) SELECT * FROM dept WHERE staff_num <> 1000; × ...

  6. 记一次艰难的IBM X3850重装系统和系统备份经验

    [贴心话] 刚刚把一切都搞定了,回到电脑前立马就写下的这篇文章,写的很细节,大家就耐心看看,有些细节是网上没有的,共享一下,仅供参考,以减少大家装机时遇到的困难. [面临处境] 机器型号:IBM X3 ...

  7. Lemon OA第1篇:简单介绍

    官方网站:http://www.mossle.com/ 声明:我不是Lemon OA作者,只是分享好的资源.以下内容均代表个人见解~ 从官网说起 知道Lemon OA,也是最近研究Activiti,看 ...

  8. 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录

    ssh-keygen  产生公钥与私钥对. ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ss ...

  9. FunGuild 数据库简介

    FUNGulid = Fungi + Functional + Guild , 是一个真菌的功能注释的数据库,目前数据库中涵盖了超过12000个真菌的功能注释信息: 网址如下: http://www. ...

  10. drools研究后记

    在实际工作中,有关于达标推断的业务逻辑 就是谁谁谁 消费满了多少钱.就返多少钱的优惠券 声明:不是drools不好,仅仅是在我遇到的场景下,不合适,不够好 在使用drools的时候发现有例如以下问题: ...