8 -- 深入使用Spring -- 4...2 使用AspectJ实现AOP
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的更多相关文章
- Spring @AspectJ 实现AOP 入门例子(转)
AOP的作用这里就不再作说明了,下面开始讲解一个很简单的入门级例子. 引用一个猴子偷桃,守护者守护果园抓住猴子的小情节. 1.猴子偷桃类(普通类): package com.samter.common ...
- Spring框架(6)---AspectJ实现AOP
AspectJ实现AOP 上一篇文章Spring框架(4)---AOP讲解铺垫,讲了一些基础AOP理解性的东西,那么这篇文章真正开始讲解AOP 通过AspectJ实现AOP要比普通的实现Aop要方便的 ...
- Spring详解(五)------AspectJ 实现AOP
上一篇博客我们引出了 AOP 的概念,以及 AOP 的具体实现方式.但是为什么要这样实现?以及提出的切入点表达式到底该怎么理解? 这篇博客我们通过对 AspectJ 框架的介绍来详细了解. 1.什么是 ...
- Spring详解(六)------AspectJ 实现AOP
上一篇博客我们引出了 AOP 的概念,以及 AOP 的具体实现方式.但是为什么要这样实现?以及提出的切入点表达式到底该怎么理解? 这篇博客我们通过对 AspectJ 框架的介绍来详细了解. 1.什么是 ...
- Spring基于AspectJ的AOP的开发——注解
源码:https://gitee.com/kszsa/dchart 一, AspectJ的概述: AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法所以它有一个专 ...
- Spring整合AspectJ的AOP
学而时习之,不亦说乎! --<论语> 看这一篇之前最好先看前面关于AOP的两篇. http://www.cnblogs.com/z ...
- (转)Spring使用AspectJ进行AOP的开发:注解方式
http://blog.csdn.net/yerenyuan_pku/article/details/69790950 Spring使用AspectJ进行AOP的开发:注解方式 之前我已讲过Sprin ...
- Spring 基于 AspectJ 的 AOP 开发
Spring 基于 AspectJ 的 AOP 开发 在 Spring 的 aop 代理方式中, AspectJ 才是主流. 1. AspectJ 简介 AspectJ 是一个基于 java 语言的 ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring使用AspectJ开发AOP基于XML和基于Annotation
AspectJ 是一个基于 Java 语言的 AOP 框架,它扩展了 Java 语言.Spring 2.0 以后,新增了对 AspectJ 方式的支持,新版本的 Spring 框架,建议使用 Aspe ...
随机推荐
- Android指南 - 样式和主题
本文翻译自:https://developer.android.com/guide/topics/ui/themes.html Style和theme词汇是专用术语,下文直接使用而不翻译. 样式和主题 ...
- eclipse如何设置高亮代码的背景色,比如选中某个单词,高亮所有的
设置方法如下: 1.单击IDE顶部Window菜单下的Prefences,如图: 2.在打开对话框的左侧树上,找到Java节点下的Editor中的Mark Occurren,如图: 3.点击Mark ...
- 12 extremely useful hacks for JavaScript
In this post I will share 12 extremely useful hacks for JavaScript. These hacks reduce the code and ...
- Jquery函数大全 - 案例说明
function(){$(this).addClass(”out”);}); toggle( fn, fn ) 如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二 ...
- 快速掌握Vue.js使用【转】
Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快速地上手并使 ...
- $(window).height() 和 $(document).height()的区别
$(window).height() 和 $(document).height()的区别 $(window).height()代表了当前可见区域的大小,$(document).height()则代表了 ...
- [Forward]Ten Caching Mistakes that Break your App
Caching large objects, duplicate objects, caching collections, live objects, thread unsafe caching a ...
- What is systemvolumeinformation? delete it?
System Volume Information完全可以删除 许多人为了自己的电脑上的System Volume Information不知道而苦恼..我再此给大家介绍一下希望能给你点帮助.. Sy ...
- Axiom3D:数据绑定基本流程
在前面我们学习OpenGL时,不管绘制如球,立方体,平面,地面,动画模型中最常用的几个操作有创建缓冲区,写入缓冲区.在Axiom中,相关的操作被整合与组织到VertexData,IndexData中, ...
- Ajax+Jsp+servlet+json技术的使用
Ajax+Jsp+servlet+json技术的使用 在使用json的时候,记得必须导入如下几个.jar包,最好是手动复制.jar包只lib路径下,否则可能出现异常. commons-beanutil ...