AspectJ(一)简介

AOP是一个概念,一个规范,本身并没有设定具体语言的实现,这实际上提供了非常广阔的发展的空间。AspectJ是AOP的一个很悠久的实现,它能够和Java 配合起来使用。

Aspectj是什么

“a seamless aspect-oriented extension to the Javatm programminglanguage”(一种基于Java平台的面向切面编程的语言)。Aspectj能做什么干净的模块化横切关注点(也就是说单纯,基本上无侵入),如错误检查和处理,同步,上下文敏感的行为,性能优化,监控和记录,调试支持,多目标的协议。

常用的Aop

Jboss Aop、Spring
Aop

Spring Aop:Spring自己原生的Aop,只能用一个词来形容:难用。你需要实现大量的接口,继承大量的类,所以spring
aop一度被千夫所指。这于他的无侵入,低耦合完全冲突。不过Spring对开源的优秀框架,组建向来是采用兼容,并入的态度。所以,后来的Spring就提供了Aspectj支持,也就是我们后来所说的基于纯POJO的Aop。

  与AspectJ的区别:Spring
Aop采用的动态织入,而Aspectj是静态织入。静态织入:指在编译时期就织入,即:编译出来的class文件,字节码就已经被织入了。动态织入又分静动两种,静则指织入过程只在第一次调用时执行;动则指根据代码动态运行的中间状态来决定如何操作,每次调用Target的时候都执行。

Aop术语 

Aspect: Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。

Jointpoint:表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。

Pointcut:表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的Advice 将要发生的地方。

Advice:Advice 定义了在 pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around来区别是在每个 joint point 之前、之后还是代替执行的代码。

简单Demo

HelloWorld.java

public class HelloWorld {

 public static void main(int i){
        System.out.println("int the main method  i = " + i);
    } 

    public static void main(String[] args) {
        main(5);
    }
}

切面:

HelloAspect.aj

public aspect HelloAspect {
    pointcut HelloWorldPointCut() : execution(* main(int)) && !within(HelloWorld);
   before() : HelloWorldPointCut(){
      System.out.println("Entering : " + thisJoinPoint.getSourceLocation());
    }
}

运行结果:

总结:

AOP并没有帮助我们解决任何新的问题,它只是提供了一种更好的办法,能够用更少的工作量来解决现有的一些问题,并且使得系统更加健壮,可维护性更好。同时,它让我们在进行系统架构和模块设计的时候多了新的选择和新的思路,AspectJ帮我们实现了这些。

时间: 2024-10-05 06:32:11

AspectJ(一)简介的相关文章

深入理解Android之AOP

深入理解Android之AOP 格式更加精美的PDF版请到:http://vdisk.weibo.com/s/z68f8l0xTgCLK 下载 一.闲谈AOP 大家都知道OOP,即ObjectOriented Programming,面向对象编程.而本文要介绍的是AOP.AOP是Aspect Oriented Programming的缩写,中译文为面向切向编程.OOP和AOP是什么关系呢?首先: l OOP和AOP都是方法论.我记得在刚学习C++的时候,最难学的并不是C++的语法,而是C++所代

Spring4深入理解AOP02----AOP简介,AspectJ基于注解(5种通知,切面优先级)

参考代码下载github:https://github.com/changwensir/java-ee/tree/master/spring4 一.AOP简介 ?AOP(Aspect-Oriented Programming, 面向切面编程):是一种新的方法论,是对传统OOP(Object-OrientedProgramming,面向对象编程)的补充. ?AOP 的主要编程对象是切面(aspect),而切面模块化横切关注点. ?在应用 AOP 编程时,仍然需要定义公共功能,但可以明确的定义这个功

AOP框架之AspectJ简介

这几天看JAVA基础看的有点头疼,决定时不时的换换口味,准备开始调研一些现在流行的技术,于是,开始埋头思考自己知识的盲区(当时,自己的知识盲区茫茫多...),想了几天后,决定要开始研究一下几种技术及实现原理. 1.AOP技术应用及实现原理. 2.quartz调度的DB持久模式及集群模式的实现及原理. 3.Mysql分库分表的方法. 4.JFinal框架的学习. 目前先暂定这个日常把,毕竟想搞定一块以我的水平来看,都得一周时间. 那么今儿我们就先来谈一谈AspectJ的实现吧,类似这样的文章在CS

Spring之AspectJ

时间:2017-2-4 21:12 --AspectJ简介 1.AspectJ是一个基于Java语言的AOP框架.2.Spring2.0以后新增了对AspectJ切点表达式的支持.3.@AspectJ是AspectJ1.5新增功能,通过JDK5注解技术,允许直接在Bean类中定义切面. 4.新版本Spring框架,建议使用AspectJ方式来开发AOP. 5.使用AspectJ需要导入Spring AOP和AspectJ相关jar包: spring-aop-3.2.0.RELEASE.jar c

SpringAOP简介

AOP(Aspect Orient Programming) --- 面向切面编程 将分散在各个业务逻辑中的相同代码 通过 "横向"切割方式抽取到独立模块中 方式抽取到独立模块中;[它针对的是程序运行中的各个步骤] 优点:增强代码复用性,使编程人员专注业务于逻辑的实现: Spring AOP简介: Spring AOP是基于动态代理的 Spring AOP既支持JDK动态代理,也支持CGLib动态代理 l  如果目标对象实现了接口,默认釆用JDK动态代理 l  当然可以强制使用CGLi

Spring 框架的架包分析、功能作用、优点,及jar架包简介

Spring 框架的架包详解    Spring的作用     Spring的优势 由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或是软件架构师,在学习和了解一个框架的时候,首先都应该知道的是这个框架的原理和与其有关jar的作用.关系.这篇文章总结一下spring框架的相关知识. 一.spirng的简介(高手可以跳过) Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Sprin

(4.6.23.1)Android之面向切面编程:AOP 与 Aspect简介

一OOP的困境 1 OOP 2 从打印日志来看AOP 和 OOP 二适用AOP的场景 三工具和库 四AspectJ简介 五AOP概念介绍 1 Join Points 何处支持注入 2 Pointcuts定位想要注入的具体连接点 21 Pointcuts基本结构 22 Joinpoint类型的直接选择 221 Joinpoint类型一览 222 定位正则 2221 Method Signature 2222 Constructor signature 2223 Field Signature 22

Spring中AOP简介与使用

Spring中AOP简介与使用 什么是AOP? Aspect Oriented Programming(AOP),多译作 "面向切面编程",也就是说,对一段程序,从侧面插入,进行操做.即通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. 为什么要用AOP? 日志记录,性能统计,安全控制,事务处理,异常处理等等.例如日志记录,在程序运行的某些节点上添加记录执行操作状态的一些代码,获取执行情况.而通过切面编程,我们将这些插入的内容分离出来,将它们独立

AOP简介

(aop所需的jar包http://www.cnblogs.com/TYDBLOG/p/7450059.html) 1 AOP概述 ●AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传统 OOP(Object-Oriented Programming,面向对象编程)的补充. ●AOP编程操作的主要对象是切面(aspect),而切面模块化横切关注点. ●在应用AOP编程时,仍然需要定义公共功能,但可以明确的定义这个功能应用在哪里,以什么方式应用