`
XTU_xiaoxin
  • 浏览: 239930 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一步一步学习spring(八)——Spring AOP之XML风格和AspectJ风格(注解形式)的比较

阅读更多
               Spring AOP和AspectJ的比较
   
    Spring AOP比完全使用AspectJ更加简单, 因为它不需要引入AspectJ的编译器/织
入器到你开发和构建过程中。 如果你仅仅需要在Spring bean上通知执行操作,那么Spring
AOP是合适的选择。 如果你需要通知domain对象或其它没有在Spring容器中管理的任意对
象,那么你需要使用AspectJ。 如果你想通知除了简单的方法执行之外的连接点(如:调用
连接点、字段get或set的连接点等等), 也需要使用AspectJ。

     XML风格 = 采用声明形式实现Spring AOP
    AspectJ风格 = 采用注解形式实现Spring AOP


    先前写的了两篇博文,描述了 XML风格 和 AspectJ风格的使用示例,有兴趣可看看:

    XML风格:http://xtu-xiaoxin.iteye.com/admin/blogs/630787
   AspectJ风格:http://xtu-xiaoxin.iteye.com/blog/630206

    1. 首先,对注解的支持是在Java5版本以后,所以,如果你使用的是java5版本以下的JVM,
不用考虑,必须选择XML风格 (XML配置形式的),而非注解形式(AspectJ风格)的。

    2. 使用XML风格,则所有的切面、切点、通知等配置都写在一个或几个Spring配置文件里。
这样的好处是,从配置文件中,就可以很清晰的看出系统中的有哪些切面,某个切面里使用那个的
通知(advice)以及通知(advice)作用的切点。而在AspectJ风格中,在java程序中标识切面
则显得凌乱、模糊。

    在什么情况下使用注解形式的AOP?或者说使用注解来实现AOP有哪些优点呢?
   
    1. XML风格的AOP仅仅支持"singleton"切面实例模型,而采用AspectJ风格的AOP则
没有这个限制。

    2.XML风格的AOP中是不支持命名连接点的声明,而采用AspectJ风格的AOP则没有这个限制。不太理解的看下面实例代码:
  在@AspectJ风格中我们可以编写如下的内容:
  
@Pointcut(execution(* get*()))
                public void propertyAccess() {}
                
                @Pointcut(execution(org.xyz.Account+ *(..))
                public void operationReturningAnAccount() {}
                
                @Pointcut(propertyAccess() && operationReturningAnAccount())
            public void accountPropertyAccess() {}


在XML风格中,我们不能使用'&&'字符来连接命名连接点,如下:
<aop:pointcut id="propertyAccess"
                expression="execution(* get*())"/>
                
                <aop:pointcut id="operationReturningAnAccount"
            expression="execution(org.xyz.Account+ *(..))"/>
            <!-- 错误的配置  -->
          <aop:pointcut id="accountPropertyAccess"
            expression="propertyAccess && operationReturningAnAccount"/>



注意: XML风格AOP虽然不支命名连接点的声明,但是,可以使用如下形式处理,如下配置:
<aop:pointcut id="propertyAccess"
                expression="execution(* get*())"/>
   <aop:pointcut id="operationReturningAnAccount"
            expression="execution(org.xyz.Account+ *(..))"/>
    <aop:pointcut id="accountPropertyAccess"
            expression="execution(* get*()) and execution(org.xyz.Account+ *(..))"/>


    这里对Spring中使用AOP两种不同的配置方式作了个简单的比较,希望对大家有点用处。
分享到:
评论
3 楼 nicholas234 2015-08-24  
你这里只说了注解的优点,但是没说到xml配置的优点,那就是不用改原来的代码,只通过配置就能达到对原来的代码做一些处理
2 楼 yfnok 2010-04-18  
再接再厉啊,向你学习中
1 楼 FeiXing2008 2010-04-09  
不错, 是个好东西 ,收了

相关推荐

    spring aop注解方式、xml方式示例

    下面将详细介绍Spring AOP的注解方式和XML配置方式。 ### 注解方式 #### 1. 定义切面(Aspect) 在Spring AOP中,切面是包含多个通知(advisors)的类。使用`@Aspect`注解标记切面类,例如: ```java @Aspect ...

    Spring 使用AspectJ 实现 AOP(基于xml文件、基于注解)

    4. **启用注解驱动的AOP**: 在Spring配置中,使用`@EnableAspectJAutoProxy`注解开启对AspectJ注解的支持。 例如: ```java @Aspect @Component public class MyAspect { @Before("execution(* ...

    Spring的AOP实例(XML+@AspectJ双版本解析+源码+类库)

    在Java世界中,Spring框架以其强大的功能和灵活性深受开发者喜爱,尤其在面向切面编程(AOP)方面,Spring提供了两种主要的实现方式:XML配置和@AspectJ注解。本篇文章将深入探讨这两个版本的AOP实现,并结合源码...

    征服Spring AOP—— @AspectJ

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)则是其核心特性之一,用于实现横切关注点的模块化,如日志、事务管理等。@AspectJ是Spring AOP的一种注解驱动方式,它极大地简化了...

    Spring 入门案例——AOP

    通过这个入门案例,你可以逐步学习如何创建和配置切面,以及如何利用Spring AOP实现实际的需求。在实践中,你会看到如何利用AOP提升代码的可维护性和可复用性,避免了横切关注点对业务代码的侵入。同时,它也会帮助...

    Spring 使用AspectJ 实现 AOP之前置通知小例子

    标题提到的"Spring 使用AspectJ 实现 AOP之前置通知小例子",指的是利用AspectJ在Spring中实现AOP的一种特定类型的通知——前置通知(Before advice)。前置通知在目标方法执行之前运行,但不会阻止方法的执行。这种...

    Spring AOP之基于AspectJ注解总结与案例

    通过阅读和理解这些代码,你可以更深入地掌握Spring AOP与AspectJ注解的使用。 总的来说,Spring AOP结合AspectJ注解使得我们能以声明式的方式处理横切关注点,提高代码的可读性和可维护性。通过实践和调试,你将更...

    Spring AOP 概念理解及@AspectJ支持

    **Spring AOP 概念理解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它允许我们通过...理解和熟练运用Spring AOP及其@AspectJ注解是每个Spring开发者必备的技能之一。

    Spring的AOP依赖包-AspectJ

    当启用AspectJ注解驱动的AOP(`@EnableAspectJAutoProxy`),Spring会自动创建代理对象来处理通知。此外,还可以通过`@AspectJSupport`和`&lt;aop:aspectj-autoproxy&gt;`元素来启用XML配置方式。 在实际应用中,AspectJ...

    spring注解aop配置详解

    通过以上介绍,我们可以看到Spring的注解AOP配置是如何让代码更简洁、更易于理解和维护的。结合实际的项目需求,我们可以灵活地使用这些注解来实现各种企业级功能,如日志、事务控制等,从而提高代码的复用性和模块...

    spring和aspectj的aop实验

    标题"spring和aspectj的aop实验"表明我们将探讨如何在Spring中使用AspectJ进行AOP实践。这通常涉及到创建切面、定义通知、配置织入策略以及测试其效果。 1. **什么是AOP** AOP的核心概念是切面(Aspect),它封装...

    spring对AOP的支持(使用AspectJ进行AOP演示)

    Spring 框架是 Java 开发中的重要组件,它提供了丰富的功能,其中之一就是对面向切面编程(AOP)的支持。面向切面编程是一种编程范式,旨在将关注点分离,使得业务逻辑与横切关注点(如日志、事务管理、安全检查等)...

    Spring AOP 16道面试题及答案.docx

    Spring支持两种AOP的实现方式:Spring AspectJ注解风格和Spring XML配置风格。使用AspectJ注解风格是最常见的,它允许开发者直接在方法上使用注解来定义切面。 Spring AOP中有五种不同类型的的通知(Advice): 1....

    Spring使用AspectJ注解和XML配置实现AOP

    本主题将深入探讨如何使用AspectJ注解和XML配置在Spring中实现AOP。 首先,我们要了解AOP的基本概念。AOP的核心是切面(Aspect),它将分散在多个对象中的横切关注点(如日志、性能监控)提取出来,形成独立的模块...

    Spring AOP + AspectJ annotation example

    本篇将深入探讨如何结合Spring AOP和AspectJ注解进行实践。 首先,我们需要理解AOP的基本概念。面向切面编程是一种编程范式,它允许程序员定义“切面”,这些切面封装了跨越多个对象的行为或关注点。在Spring中,切...

    aspectj的jar spring使用aop需要的jar

    8. **类型匹配(Type Matching)**:AspectJ的强项之一是类型匹配能力,它允许你基于类或接口来定义切入点,而不仅仅是方法签名,这比Spring AOP的基于方法签名的切入点更灵活。 9. **注解驱动(Annotation-Based)...

    Spring基于注解实现AOP

    本篇文章将深入探讨如何在Spring中通过注解实现AOP。 首先,了解AOP的基本概念。面向切面编程是一种编程范式,它允许程序员定义“切面”,这些切面包含了跨越多个对象的行为或责任。切点是这些行为插入到主业务逻辑...

Global site tag (gtag.js) - Google Analytics