`
iamzhongyong
  • 浏览: 807516 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于AOP的种种疑问

    博客分类:
  • java
 
阅读更多

    最近在用AOP做一个小东西,于是开始翻阅一些AOP的资料,中间解决了自己的一些疑问,记录下来。

    

    什么是AOP?

    其实早就知道呵呵,这里作为引子吧。AOP是面向切面的编程。最大的好处就是对于已有的系统弱侵入。

现在用处比较多的就是数据库事务管理、日志处理、性能监控等等方面。因为这些东西足够公共,可以抽取出来,减少对于系统的侵入。

        

    AOP的主要原理是啥?

    动态代理,原有的类不做改变,构造出另外一个类来代理这个类的行为,在这个新类中添加逻辑。JDK在很早的版本就提供了动态代理功能,

目前还有比较出名的Cglib,这里就不再展开讨论。

 

    现在AOP有哪些实现?

    设计的目标是把横切的问题模块化,目前来看主要有四个实现。

    Aspect:语言级AOP的实现,扩展了Java语言,能够在编译期间提供模块代码的植入;

    AspectWerkz:基于java的简单、动态、轻量级的框架,支持运行期间和编译期间的植入;

    JBoss AOP:JBoss应用服务器框架扩展的一个功能;

    Spring AOP:使用纯java语言实现,不需要专门的编译过程和类加载器,在运行期间通过代理向目标类提供增强;

 

    那Spring中AOP使用是咋回事情呢?

    Spring长处并不是提供一个完整的Aop实现,它的长处就是整合其他各类AOP的实现。

    Spring在2.0之后,对于AOP的功能进行了重要的增强。

    1、新增加了基于Schema的配置支持,为AOP提供了命名空间;

    2、增加了对于Aspect切点表达式语言的支持;

    3、可以无缝的集成Aspect;

    对于JDK5的项目,推荐使用Spring中提供的@Aspect的配置方式,因为可以更简单更直接的应用切面;

 

    AOP的几个关键术语?

    JoinPoint:程序执行的特定位置,具有边界性质的特点,例如方法执行前,方法执行后;

    PointCut:通过PointCut来定位JoinPoint,数据库的概念来描述最为清楚,JoinPoint相当于数据库中的记录,PointCut相当于查询条件;

    Advice:植入到目标类连接点上的一段程序代码;

    Target:增强逻辑要植入的目标类;

    Introduction:引介是一种特殊的增强,为类添加一些属性和方法;

    Weaving:将增强添加到目标类连接点上的过程;

    Aspect:切面有切点和增强组成;

 

    Spring中使用AOP有几种方式?

    ​1、基于Advisor类的方式;

    ​2、基于@Aspect的方式;

    ​3、基于<aop:advisor>的方式(一种混血儿呵呵);

    ​4、基于<aop:aspect>的方式;

    ​Spring提供了很多选择,都得选择确实让人头疼。

如果是JDK5的工程,优先推荐@Aspect的方式,如果是低版本的JDK,则可以使用<aop:aspect>的方式;

如果是老系统改造,可以使用<aop:advisor>来复用之前的Advice类,如果是低版本的Spring,则只能只用Advisor类了;

 

    ​Spring有哪几种增强形式?

    ​五种,前置、后置、环绕、异常抛出、引介(增加方法和属性);

    ​

    ​参考书籍《spring 3.X企业应用开发实战》

    ​

 

2
2
分享到:
评论
2 楼 pudong 2013-08-09  
1 楼 lvwenwen 2013-08-09  
写得不错!

相关推荐

    个人整理的关于AOP概念

    ### AOP概念详解 #### 一、AOP概述 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,旨在通过将横切关注点与业务逻辑分离,增强代码的可读性和可维护性。在企业级应用中,事务管理、日志...

    Spring AOP基础关于AOP是什么的理解

    Spring AOP 基础关于 AOP 是什么的理解 AOP(Aspect Oriented Programming 面向方面的编程)是一种实现横切面的工具,它是 OOP 的补充,而不是 OOP 的竞争对手。AOP 的出现是为了解决 OOP 中的缺陷,即 OOP 中的类...

    spring aop spring aop

    在给出的XML配置中,`&lt;aop:config&gt;`元素开启AOP支持,而`&lt;aop:aspect&gt;`元素用于定义切面,其内部通过`&lt;aop:pointcut&gt;`定义切点,并通过`&lt;aop:before&gt;`和`&lt;aop:after&gt;`指定通知。 为了使用这些配置,我们需要在代码...

    spring-aop.jar各个版本

    spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...

    aopalliance-1.0.jar及aopalliance源码

    **AOP Alliance简介** AOP Alliance是一个开源项目,它的全称是Aspect Oriented Programming(面向切面编程)Alliance,是Java平台上的一个接口集合,为面向切面编程的实现提供了一个统一的API。这个库的主要目的是...

    spring-boot aop

    本示例是关于如何在Spring Boot项目中实现AOP功能的一个简单演示。 首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或关注点,如日志记录。切点(Pointcut)定义了在何处...

    aop所依赖的所有包

    AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在减少代码的重复性和增强可维护性,特别是在处理系统中的横切关注点时。这些关注点,如日志、事务管理、安全检查等,往往分散在系统的各个部分...

    开发工具 aopalliance-1.0

    开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具...

    AOP@Work AOP 工具比较

    面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在通过将关注点分离,提高软件的模块化程度。AOP的核心是切面,它封装了横切关注点,如日志、事务管理、性能监控等,使得这些功能可以独立于主...

    aopalliance最新完整jar包

    在Java应用中,aopalliance.jar包扮演着至关重要的角色,它包含了一些核心接口,如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.aop.Advice`,这些接口定义了拦截器和通知的概念,它们是AOP的...

    spring aop jar 包

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。这个"spring aop jar 包"包含了实现这一功能所需的类和接口,...

    aop开发环境jar包

    在IT行业中,AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它旨在提高软件的模块化程度,将关注点分离。在Java世界里,AOP常用于处理日志、事务管理、权限检查等横切关注点。当我们谈到“AOP...

    aopalliance

    它定义了一些基础的AOP接口,如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.aop.Advice`,这些接口被广泛应用于诸如AspectJ、Spring AOP等AOP框架中。 二、AOPAlliance在Spring 2.0中的作用 ...

    AOP使用CGLIB实现AOP功能

    Spring AOP实现方法之一:CGLIB 实现AOP功能

    aopalliance-1

    标签 "aopalliance-1" 确认了这个主题是关于AOP Alliance的第一个版本。 在压缩包子文件的文件名称列表中,我们看到两个文件: 1. `struts2-spring-plugin-2.1.6.jar`:这是Struts 2与Spring的整合插件,版本为...

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    面向切面编程(AOP)是一种编程范式,旨在将横切关注点(如日志、安全等)与业务逻辑分离,从而提高模块化。AOP通过预定义的“切面”对横切关注点进行模块化,从而可以在不修改业务逻辑代码的情况下增加新功能。动态...

    aopalliance-1.0

    《AOP Alliance 1.0:面向切面编程的核心接口》 在软件开发领域,AOP(Aspect-Oriented Programming,面向切面编程)是一种重要的编程范式,它旨在提高代码的可重用性和模块化程度,使得关注点分离得以更好地实现。...

    基于注解实现SpringAop

    基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop

    aopalliance-white-paper(AOP Alliance白皮书)

    ### AOP Alliance 白皮书核心知识点解析 #### 一、引言 AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,它旨在通过将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,提高系统的...

    简单spring aop 例子

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...

Global site tag (gtag.js) - Google Analytics